状态压缩 HDU4539 郑厂长系列故事——排兵布阵
多组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 郑厂长系列故事——排兵布阵的更多相关文章
- HDU-4539郑厂长系列故事——排兵布阵(状态压缩,动态规划)
郑厂长系列故事--排兵布阵 Time Limit : 10000/5000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total ...
- hdu4539 郑厂长系列故事——排兵布阵 + POJ1158 炮兵阵地
题意: 郑厂长系列故事--排兵布阵 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/32 ...
- 郑厂长系列故事——排兵布阵 hdu4539(状态压缩DP)
郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
- HDU 4539郑厂长系列故事――排兵布阵(状压DP)
HDU 4539 郑厂长系列故事――排兵布阵 基础的状压DP,首先记录先每一行可取的所哟状态(一行里互不冲突的大概160个状态), 直接套了一个4重循环居然没超时我就呵呵了 //#pragma co ...
- HDU 4539 郑厂长系列故事——排兵布阵 状压dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事--排兵布阵 Time Limit: 10000/5000 MS (Java/O ...
- HDU 4539 郑厂长系列故事——排兵布阵
http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others) ...
- HDU 4539 郑厂长系列故事——排兵布阵 —— 状压DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Ot ...
- POJ 1185 - 炮兵阵地 & HDU 4539 - 郑厂长系列故事——排兵布阵 - [状压DP]
印象中这道题好像我曾经肝过,但是没肝出来,现在肝出来了也挺开心的 题目链接:http://poj.org/problem?id=1185 Time Limit: 2000MS Memory Limit ...
- hdu_4539_郑厂长系列故事——排兵布阵(状压DP|最大团)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4539 题意:中文,不解释 题解:将每一行的状态压缩,然后进行DP,也可以用最大团做.这里我用的DP # ...
随机推荐
- 为什么使用Sass
为什么使用Sass 作为前端(html.javascript.css)的三大马车之一的css,一直以静态语言存在,HTML5火遍大江南北了.javascript由于NODE.JS而成为目前前后端统一开 ...
- Guava 是个风火轮之函数式编程(3)——表处理
云栖社区> 博客列表> 正文 Guava 是个风火轮之函数式编程(3)--表处理 潘家邦 2016-01-26 13:19:21 浏览1062 评论0 java Guava 摘要: 早先学 ...
- css相关问题
display:none和visibility:hidden的区别? 前几天遇到的这个问题,表格布局:::::display:none 隐藏对应的元素,在文档布局中不再给它分配空间,它各边的元素会合拢 ...
- 【转】TestFlight APP测试(IOS如何让上架前给其他人测试)
原文网址:http://blog.csdn.net/dexin5195/article/details/43966571 大家都知道, 以前iOS项目要测试只需要上传到testflightapp.co ...
- 自定义JS常用方法
1,获取表格中的元素,支持IE,chrome,firefox //获取表单元素的某一个值 function getTableColumnValue(tableId, rowNumber, column ...
- npm淘宝镜像
前端开发会用到npm的包,但是国外的速度有时候很慢,幸运的是,淘宝做了镜像,一起来看看吧. https://npm.taobao.org/
- SQL 按特定字段值排序
SQL 按特定字段值排序的代码,有需要的朋友可以参考下. id, name shandong01 name1 shandong02 name2 shandong03 name3 beijing01 n ...
- web standards
http://www.w3.org/standards/ http://www.webstandards.org/learn/faq/#p213 http://www.w3.org/standards ...
- C#:DataTable映射成Model
这是数据库开发中经常遇到的问题,当然,这可以用现成的ORM框架来解决,但有些时候,如果DataSet/DataTable是第三方接口返回的,ORM就不方便了,还得自己处理. 反射自然必不可少的,另外考 ...
- 微软虚拟学院MVA 字幕获取方法
微软虚拟学院(MVA)上有一些不错的视频教程,但是,蛋疼的一点那就是视频要不就慢,要不就卡,总之当你的思维跟着视频深入的时候,duang~,卡一下,说不定就要重头开始,所幸的是提供了视频下载,下载速度 ...