多组n *m

0不能放1可以放

每个士兵可以攻击到并且只能攻击到与之曼哈顿距离为2的位置以及士兵本身所在的位置。

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<map> using namespace std; #define MAXN 1<<10
int z[][];
int x[];
int dp[][][]; //dp[i][j][k] 第i行状态为num[j]第i-1行状态为num[k] 的最大士兵数目
int num[]; //合法状态
int cn[]; //对应可以放的人数目 int Count(int a)
{
int ans=;
while(a>)
{
if(a&)
ans++;
a=a>>;
}
return ans;
}
int main()
{
int n,m; while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=;i<n;i++)
for(int j=;j<m;j++)
scanf("%d",&z[i][j]);
memset(x,,sizeof(x));
memset(dp,-,sizeof(dp));
int cnt=;
int en=<<m;
for(int i=;i<en;i++)
if(((i&(i<<)))==)
{
cn[cnt]=Count(i);
num[cnt++]=i;
}
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
if(!z[i][j])
x[i]|=(<<j);
} for(int i=;i<cnt;i++) //初始化一下
{
if(x[]&num[i])
continue;
dp[][i][]=cn[i];
} for(int i=;i<n;i++) //第一行开始转移
{
for(int j=;j<cnt;j++) //这行的状态
{
if(x[i]&num[j]) //这一行和这个状态不能矛盾
continue;
for(int k=;k<cnt;k++) //上一行的状态
{
if((num[j]&(num[k]<<))||(num[j]&(num[k]>>)))//这一行状态和上一行左 右
continue;
for(int k1=;k1<cnt;k1++) //上面第二行状态
{
if(num[j]&num[k1]) //上一行和上上行
continue;
if(num[k]&(num[k1]<<))
continue;
if(num[k]&(num[k1]>>))
continue;
if(dp[i-][k][k1]==-)
continue;
dp[i][j][k]=max(dp[i][j][k],dp[i-][k][k1]+cn[j]);
}
}
}
}
int ans=;
for(int i=;i<cnt;i++)
for(int j=;j<cnt;j++)
ans=max(dp[n-][i][j],ans);
printf("%d\n",ans);
}
return ;
}

状态压缩 HDU4539 郑厂长系列故事——排兵布阵的更多相关文章

  1. HDU-4539郑厂长系列故事——排兵布阵(状态压缩,动态规划)

    郑厂长系列故事--排兵布阵 Time Limit : 10000/5000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total ...

  2. hdu4539 郑厂长系列故事——排兵布阵 + POJ1158 炮兵阵地

    题意:                  郑厂长系列故事--排兵布阵 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/32 ...

  3. 郑厂长系列故事——排兵布阵 hdu4539(状态压缩DP)

    郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  4. HDU 4539郑厂长系列故事――排兵布阵(状压DP)

    HDU 4539  郑厂长系列故事――排兵布阵 基础的状压DP,首先记录先每一行可取的所哟状态(一行里互不冲突的大概160个状态), 直接套了一个4重循环居然没超时我就呵呵了 //#pragma co ...

  5. HDU 4539 郑厂长系列故事——排兵布阵 状压dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事--排兵布阵 Time Limit: 10000/5000 MS (Java/O ...

  6. HDU 4539 郑厂长系列故事——排兵布阵

    http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others) ...

  7. HDU 4539 郑厂长系列故事——排兵布阵 —— 状压DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Ot ...

  8. POJ 1185 - 炮兵阵地 & HDU 4539 - 郑厂长系列故事——排兵布阵 - [状压DP]

    印象中这道题好像我曾经肝过,但是没肝出来,现在肝出来了也挺开心的 题目链接:http://poj.org/problem?id=1185 Time Limit: 2000MS Memory Limit ...

  9. hdu_4539_郑厂长系列故事——排兵布阵(状压DP|最大团)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4539 题意:中文,不解释 题解:将每一行的状态压缩,然后进行DP,也可以用最大团做.这里我用的DP # ...

随机推荐

  1. instanceof

    java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例. instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. result ...

  2. Struts2 Action中动态方法调用、通配符的使用

    一.Struts2执行过程图: 二.struts2配置文件的加载顺序 struts-default.xml---struts-plugin.xml---struts.xml 具体步骤: 三.Actio ...

  3. AC日记——字符串最大跨距 openjudge 1.7 26

    26:字符串最大跨距 总时间限制:  1000ms 内存限制:  65536kB 描述 有三个字符串S,S1,S2,其中,S长度不超过300,S1和S2的长度不超过10.想检测S1和S2是否同时在S中 ...

  4. AC日记——过滤多余的空格 1.7 23

    23:过滤多余的空格 总时间限制:  1000ms 内存限制:   65536kB 描述 一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格. 输入 一行,一个字符串(长度不超过200), ...

  5. UIGrid/UITable 性能优化

    性能优化 排行榜,邮件,关卡等数据列表项,一般在玩家打开面板时,都会重新刷新一次数据,那是否有必要每次都生成列表项呢? 假如每次列表的内容有变动就Instance 新的Gameobject,这是没有必 ...

  6. 虚拟机软件VMware Workstation Pro的安装与使用

    聚焦行业最佳实践,BDTC 2016完整议程公布      Java 编程入门(系列)      程序员11月书讯,评论得书啦      免费的知识库,你的知识库 虚拟机软件VMware Workst ...

  7. 隐写-CTF中图片隐藏文件分离方法总结

    0x00 前言 在安全的大趋势下,信息安全越来越来受到国家和企业的重视,所以CTF比赛场次越来越多,而且比赛形式也不断的创新,题目也更加新颖有趣,对选手的综合信息安全能力有一个较好的考验,当然更好的是 ...

  8. html页面实现自动刷新的几种方法

    使用场景: 1. 页面需要定时刷新,实时加载数据(H5中的WebSocket和SSE可以实现局部刷新) 2. 一定时间之后跳转到指定页面(登录注册之类) 3. 前端开发使用伪数据调试html页面(修改 ...

  9. ajax设置自定义请求头信息

    客户端请求 $.ajax({ type:"post", url:urlstr, dataType:'json', async:true, headers:{token:'abck' ...

  10. c语言:printf系列的函数

    /** *----------------------------stdio.h--------------------------------------- * int printf(const c ...