POJ 1185 炮兵阵地(经典的状态压缩DP)
题意:中文题。
思路,经典的状态压缩题目。
由于列长比较小,我们可以以行为阶段用状态压缩来做。
由于攻击只占两个格,这样从行的角度看,第i行的炮兵只与前i-1和前i-2行有关系。这样如果用j,k,l分别表示第i,i-1,i-2行的炮兵摆放状态,而num[i][j]表示第i个摆放状态为j时的炮兵个数。dp[i][k][j]表示以i为最后一行,倒数第一行摆放为j,倒数第二行摆放为k时的最优解。
这样得到状态转移方程dp[i][k][j]=max{dp[i-1][l][k]+num[i][j]},前提是j和k、l都不互相攻击。
其中炮兵的摆放状态要预处理出来,如果m至大为10,这样枚举的话最多是2^10。由于最后得到合法状态不多,使用的时候可以直接用保存的下标而不是用二进制表示状态。这样可以大大提高时空复杂度。
#include<cstdio> #include<iostream> #include<cstdlib> #include<cstring> #include<vector> using namespace std; vector<]; vector<]; ][]; int m,n; bool check(int sta,int d) { <<d); } bool check1(int c,int sta)//检查是否在山上放炮 { ; i<m; ++i) if(grid[c][i]=='H'&&check(sta,i)) return false; return true; } bool attack(int d,int sta)//某状态下判断同行之间是否相互攻击 { >=&&check(sta,d-)) return true; >=&&check(sta,d-)) return true; <m&&check(sta,d+)) return true; <m&&check(sta,d+)) return true; return false; } int check2(int sta)//判断是否互相攻击和统计炮个数 { ; ; i<m; ++i) if(check(sta,i)) { ; else cnt++; } return cnt; } void init(int c) { ; i<(<<m); ++i) if(check1(c,i))//没有放在山坡上的情况 { int cnt=check2(i);//判断是否互相攻击和炮个数 ) { sta[c].push_back(i);//保存摆放位置状态 num[c].push_back(cnt);//保存对应状态下的个数 } } } ][][]; bool attack2(int sta1,int sta2)//判断不同行之间的状态下炮是否互相攻击 { ; i<m; ++i) if(check(sta1,i)&&check(sta2,i)) return true; return false; } int main() { scanf("%d%d",&n,&m); ; i<=n; ++i) { scanf("%s",grid[i]); init(i); } ) { ; ;i<sta[].size();++i) ans=max(ans,num[][i]); printf("%d\n",ans); ; } ; i<sta[].size(); ++i) ; j<sta[].size(); ++j) ][i],sta[][j])) dp[][i][j]=num[][i]+num[][j]; ; i<=n; ++i) { ; k<sta[i].size(); ++k) ; j<sta[i-].size(); ++j) { ][j]; if(!attack2(stak,staj)) { ; ; l<sta[i-].size(); ++l) { ][l]; if(!attack2(stak,stal)&&!attack2(staj,stal)) maxn=max(maxn,dp[i-][l][j]); } dp[i][j][k]=maxn+num[i][k]; } } } ; ; i<sta[n].size(); ++i) ; j<sta[n-].size(); ++j) ans=max(ans,dp[n][j][i]); printf("%d\n",ans); ; }
POJ 1185 炮兵阵地(经典的状态压缩DP)的更多相关文章
- POJ 1185 炮兵阵地 经典的 状态压缩dp
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16619 Accepted: 6325 Description ...
- POJ 1185 炮兵阵地(动态规划+状态压缩)
炮兵阵地 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原( ...
- poj 1185 炮兵阵地 [经典状态压缩DP]
题意:略. 思路:由于每个大炮射程为2,所以如果对每一行状态压缩的话,能对它造成影响的就是上面的两行. 这里用dp[row][state1][state2]表示第row行状态为state2,第row- ...
- poj -1185 炮兵阵地 (经典状压dp)
http://poj.org/problem?id=1185 参考博客:http://poj.org/problem?id=1185 大神博客已经讲的很清楚了,注意存状态的时候是从1开始的,所以初始化 ...
- POJ 1185 炮兵阵地 状压dp
题目链接: http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K 问题描述 司令部的将军们打算在N*M ...
- POJ 1185 炮兵阵地(状压DP)
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 26426 Accepted: 10185 Descriptio ...
- poj - 1185 炮兵阵地 状压DP 解题报告
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 21553 Accepted: 8363 Description ...
- POJ 1185炮兵阵地 (状压DP)
题目链接 POJ 1185 今天艾教留了一大堆线段树,表示做不动了,就补补前面的题.QAQ 这个题,我第一次写还是像前面HDU 2167那样写,发现这次影响第 i 行的还用i-2行那样,那以前的方法就 ...
- POJ - 1185 炮兵阵地 (插头dp)
题目链接 明明是道状压dp的题我为啥非要用插头dp乱搞啊 逐行枚举,设dp[i][S]为枚举到第i个格子时,状态为S的情况.S为当前行上的“插头”状态,每两个二进制位表示一个格子,设当前格子为(x,y ...
随机推荐
- Nemo Documents – 给文件添加标签 以日历的形式将文件呈现出来,很像 Outlook,你可以根据年、月、日来查看不同类型的文档
Nemo Documents – 给文件添加标签 scavin(Google+) on 2012.03.28. Nemo Documents 是款文件组织管理工具(文档管理器),不是街道大妈胜似大 ...
- 配置NGReport 报告中文
1. 测试报告的名称 在测试开始或测试监听器的类中加上下面一句代码即可: System.setProperty("org.uncommons.reportng.title", &q ...
- 一些不认识的开源js(更新ing。。。)
孟星魂和小蝶归隐山林曾经说过,我们不问江湖事,但是不能不知道江湖事,因为我们是老伯的人(大概意思),所以有些东西可以用不到,但是一定要了解点... (首先不能人云亦云,但是有个主观观点也没啥大问题) ...
- Qt之保持GUI响应
简述 Qter们经常遇到由于耗时操作造成GUI阻塞的问题.其实,这个问题并不难克服,可以采用许多不同的方式,下面我会列举一些可选范围,根据使用情况进行处理. 简述 执行耗时操作 手动事件处理 使用一个 ...
- memset,memcpy,memcmp用法
void* memset(void *s, int ch, size_t n); 将s所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ASCII值. 例如:memset(lpMyStruct ...
- 在唯一密钥属性“name”设置为“ScriptHandlerFactory”时,无法添加类型为“add”的重复集合项
出错原因:同一根目录下有两个相同的WebConfig文件 解决办法:删除子其中一个webConfig文件. 详细:
- target不起作用了
原因是 <a href="",target></a>中间多了个逗号.
- struts2视频学习笔记 15-17 (访问或添加request属性,文件上传)
课时15 访问或添加request/session/application属性 1.简单说 page指当前页面.在一个jsp页面里有效 2.request 指从http请求到服务器处理结束,返回响应的 ...
- mustache模板技术
一.简介Web 模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,通常是标准的 HTML 文档.当然不同的开发语言有不同模板引擎,如 Javascript 下的 Hog ...
- ThinkPHP中数据库操作返回值总结
转自:http://www.baiwar.com/post/thinkphp-database-operations-in-the-return-value.html Thinkphp中的Think\ ...