题目链接

题意 : 中文题不详述。

思路 :状压DP,1表示该位置放炮弹,0表示不放。dp[i][j][k],代表第 i 行的状态为k时第i-1行的状态为 j 时放置的最大炮弹数。只是注意判断的时候不要互相攻击到就可以了,还要与地形相适应。

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std ; int dp[][][] ;
int sum[] ;
int sta[] ;
int mapp[] ;
char sh[][] ;
int num ;
int N,M ; int getsum(int x)
{
x=(x& 0x55555555)+((x>>)& 0x55555555);
x=(x& 0x33333333)+((x>>)& 0x33333333);
x=(x& 0x0F0F0F0F)+((x>>)& 0x0F0F0F0F);
x=(x& 0x00FF00FF)+((x>>)& 0x00FF00FF);
x=(x& 0x0000FFFF)+((x>>)& 0x0000FFFF);
return x;
}
//int getsum(int x)
//{
// int cnt = 0 ;
// while(x)
// {
// cnt ++ ;
// x &= x-1 ;
// }
// return cnt ;
//}
int main()
{
while(~scanf("%d %d",&N,&M) )
{
memset(dp,-,sizeof(dp)) ;
num = ;
for(int i = ; i <= N ; i++)
{
scanf("%s",sh[i]) ;
for(int j = ; j < M ; j++)
{
if(sh[i][j] == 'H')
mapp[i] |= ( << j) ;//把高原的地方标记一下
}
}
for(int i = ; i < ( << M) ; i++)//枚举所有可行的状态
{
if(i & (i << ) || i & (i >> ) || i & (i << ) || i & (i >> ))
continue ;
// cout<<i<<" ";
sum[num] = getsum(i) ;//求i状态中1的个数
sta[num++] = i ;//将该状态存到数组中
}
// cout<<endl;
for(int i = ; i < num ; i++)
{
if(sta[i] & mapp[]) continue ;
dp[][][i] = sum[i] ;
}
for(int i = ; i <= N ; i++)
{
for(int k = ;k < num ; k++)
{
if(mapp[i] & sta[k]) continue ;
for(int j = ; j < num ; j++)
{
if(sta[j] & sta[k]) continue ;
for(int h = ; h < num ; h++)
{
if(sta[h] & sta[k]) continue ;
if(sta[h] & sta[j]) continue ;
if(dp[i-][h][j] != -)
{
dp[i][j][k] = max(dp[i][j][k],dp[i-][h][j]+sum[k]) ;
}
}
}
}
}
int ans = ;
for(int j = ; j < num ; j++)
{
for(int k = ; k < num ; k++)
ans = max(ans,dp[N][j][k]) ;
}
printf("%d\n",ans) ;
}
return ;
}

POJ 1185 炮兵阵地 (状压DP)的更多相关文章

  1. POJ 1185 炮兵阵地 状压dp

    题目链接: http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K 问题描述 司令部的将军们打算在N*M ...

  2. POJ 1185炮兵阵地 (状压DP)

    题目链接 POJ 1185 今天艾教留了一大堆线段树,表示做不动了,就补补前面的题.QAQ 这个题,我第一次写还是像前面HDU 2167那样写,发现这次影响第 i 行的还用i-2行那样,那以前的方法就 ...

  3. poj - 1185 炮兵阵地 状压DP 解题报告

    炮兵阵地 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 21553   Accepted: 8363 Description ...

  4. [poj 1185] 炮兵阵地 状压dp 位运算

    Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用&quo ...

  5. POJ1185 炮兵阵地 —— 状压DP

    题目链接:http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions ...

  6. TZOJ 4912 炮兵阵地(状压dp)

    描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P" ...

  7. 洛谷P2704 [NOI2001]炮兵阵地 [状压DP]

    题目传送门 炮兵阵地 题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图 ...

  8. [POJ1185][NOI2001]炮兵阵地 状压DP

    题目链接:http://poj.org/problem?id=1185 很裸的状压,考虑对于一行用二进制储存每一种的状态,但是状态太多了做不了. 观察到有很多状态都是不合法的,于是我们预处理出合法的状 ...

  9. luogu 2704 炮兵阵地 状压dp

    状压的基础题吧 第一次看感觉难上天,后来嘛就.. 套路:先根据自身状态筛出可行状态,再根据地图等其他限制条件筛选适合的状态加入答案 f i,j,k 分别代表 行数,本行状态,上行状态,再累加答案即可 ...

  10. [NOI2001]炮兵阵地 状压DP

    题面: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最多 ...

随机推荐

  1. core java 1~4(HelloWorld & 标识符|关键字|数据类型 & 表达式|流程控制 & 数组)

    MODULE 1 Java的编译和运行----------------------------编译:javac -d bin src\HelloWorld.java -d:指定编译后的class 文件 ...

  2. virtualbox下 ubuntu 14.04设置外网独立IP

    安装时记得选择sshserver vim /etc/network/interfaces iface eth0 inet static address YOUR IP netmask 子网掩码 get ...

  3. C# DateTime详解

    //今天DateTime.Now.Date.ToShortDateString();//昨天,就是今天的日期减一DateTime.Now.AddDays(-1).ToShortDateString() ...

  4. 64.OV7725初始化配置

    所有的结局都是好的,不好,是因为你还有坚持到最好. OV7725摄像头的初始化配置,需要SCCB总线即IIC接口配置.先发送配置数据到OV7725中,然后通过随机读取对应地址的数据来验证数据是否写进去 ...

  5. 20145129 《Java程序设计》第3周学习总结

    20145129 <Java程序设计>第3周学习总结 教材学习内容总结 类与对象 定义类 一个原始码中可以有多个类定义,但只有一个是公开类(public),并且文档中的主文档名必须和公开类 ...

  6. Write operations are not allowed in read-only mode (FlushMode.NEVER/

    今天在做ssh项目开发的时候遇到一个问题,保存数据的时候报错: Write operations are not allowed in read-only mode (FlushMode.NEVER/ ...

  7. MVC5 自定义表单错误信息

    1.

  8. android 高德地图出现【定位失败key鉴权失败】

    如题:android 高德地图出现[定位失败key鉴权失败] 原因:使用的是debug模式下的SHA1,发布的版本正确获取SHA1的方式见: 方法二使用 keytool(jdk自带工具),按照如下步骤 ...

  9. 使用javac命令编译java文件。

    今天想学习一下web services的知识,在网上找了一个教程,里面写了一个web services客户端调用,在cmd下执行的,但是没有给出用javac编译的细节.所以自己就借着这个机会学了一下: ...

  10. 02.XMemcached的使用

        关于XMemcached的介绍或文档请参考:https://code.google.com/p/xmemcached/wiki/User_Guide_zh     关于Memcached的命令 ...