POJ 1185 炮兵阵地(状压DP)题解
思路:和上一篇思路一样,但是这里要求最大能排几个,这里要开三维,记录上次和上上次的状态,再一一判定,状态转移方程为 dp[i][j][k] = max(dp[i][j][k],dp[i - 1][k][t] + num[j])
代码:
#include<cstdio>
#include<map>
#include<set>
#include<queue>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define ll long long
const int N = 500+5;
const int MOD = 100000000;
const int INF = 0x3f3f3f3f;
using namespace std;
int n,m,top;
int cur[110],state[110],dp[110][110][110],num[110];
void init(){
top = 0;
int tot = 1 << m;
for(int i = 0;i < tot;i++){
if(i&(i<<1) || i&(i<<2)) continue;
state[++top] = i;
for(int j = 0;j < m;j++){
if(i&1<<j) num[top]++;
}
}
}
int main(){
char s[12];
scanf("%d%d",&n,&m);
memset(dp,0,sizeof(dp));
memset(num,0,sizeof(num));
memset(cur,0,sizeof(cur));
memset(state,0,sizeof(state));
init();
for(int i = 1;i <= n;i++){
scanf("%s",s + 1);
cur[i] = 0;
for(int j = 1;j <= m;j++){
if(s[j] == 'H'){
cur[i] |= 1<<(j - 1);
}
}
}
for(int i = 1;i <= top;i++){
if(cur[1]&state[i]) continue;
dp[1][i][1] = num[i];
}
for(int i = 1;i <= top;i++){
if(cur[2]&state[i]) continue;
for(int j = 1;j <= top;j++){
if(cur[1]&state[j]) continue;
if(state[i]&state[j]) continue;
for(int k = 1;k <= top;k++){
dp[2][i][j] = max(dp[2][i][j],dp[1][j][k] + num[i]);
}
}
}
for(int i = 3;i <= n;i++){
for(int j = 1;j <= top;j++){
if(cur[i]&state[j]) continue;
for(int k = 1;k <= top;k++){
if(cur[i - 1]&state[k]) continue;
if(state[j]&state[k]) continue;
for(int t = 1;t <= top;t++){
if(cur[i - 2]&state[t]) continue;
if(state[k]&state[t]) continue;
if(state[j]&state[t]) continue;
dp[i][j][k] = max(dp[i][j][k],dp[i - 1][k][t] + num[j]);
}
}
}
}
ll ans = 0;
for(int i = 1;i <= top;i++){
for(int j = 1;j <= top;j++){
if(dp[n][i][j] > ans) ans = dp[n][i][j];
}
}
printf("%lld\n",ans);
return 0;
}
POJ 1185 炮兵阵地(状压DP)题解的更多相关文章
- 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: 21553 Accepted: 8363 Description ...
- POJ 1185炮兵阵地 (状压DP)
题目链接 POJ 1185 今天艾教留了一大堆线段树,表示做不动了,就补补前面的题.QAQ 这个题,我第一次写还是像前面HDU 2167那样写,发现这次影响第 i 行的还用i-2行那样,那以前的方法就 ...
- [poj 1185] 炮兵阵地 状压dp 位运算
Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用&quo ...
- POJ1185 炮兵阵地 —— 状压DP
题目链接:http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions ...
- TZOJ 4912 炮兵阵地(状压dp)
描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P" ...
- 洛谷P2704 [NOI2001]炮兵阵地 [状压DP]
题目传送门 炮兵阵地 题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图 ...
- [POJ1185][NOI2001]炮兵阵地 状压DP
题目链接:http://poj.org/problem?id=1185 很裸的状压,考虑对于一行用二进制储存每一种的状态,但是状态太多了做不了. 观察到有很多状态都是不合法的,于是我们预处理出合法的状 ...
- [NOI2001]炮兵阵地 状压DP
题面: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最多 ...
- 炮兵阵地 /// 状压DP oj26314
题目大意: 炮兵阵地 设置炮兵的位置 其上两位 下两位 左两位 右两位 不能同时设置炮兵 这题是 corn fields玉米地 的升级版 可以先看下这题的注释 更详细些 第一种方法是网上大多数题解的解 ...
随机推荐
- POJ1125-Stockbroker Grapevine Floyd算法多源最短路径
这题的思路还是比较简单,用弗洛伊德算法打表后,枚举来找到最小值 代码如下 注意最后判断时候的语句 在这里错误了很多次 # include<iostream> # include<al ...
- bootstrap之输入框组
向输入域添加前缀和后缀的内容 <div style="padding: 100px 100px 10px;"> <form class="bs-exam ...
- Suricata规则配置
Suricata 规则配置 IDS/IPS/WAF IPS.IDS和WAF分别是入侵防御系统和入侵检测系统以及WEB应用防火墙的简称,很多人说这些玩意不就是盒子吗已经过时了,其实不是,SIEM其实是有 ...
- scss语法
SCSS其实就是SASS新语法, 增强了对CSS3语法的支持 1.变量(Variables) /*声明变明*/ $color: #333; $bgcolor:#f36; /*引用变量*/ body { ...
- Mac - 苹果电脑mac系统释放硬盘空间方法汇总
硬盘空间是大家最头痛的一个问题,大家在硬盘空间变小的时候怎么腾空间的呢?下面为大家分享7个mac系统释放空间的高级方法,大家赶紧来收了! mac系统释放硬盘空间方法: 方法一:删除Emacs--可以节 ...
- SpringMVC XXX-servlet.xml ApplicationContext.xml
因为直接使用了SpringMVC,所以之前一直不明白xxx-servlet.xml和applicationContext.xml是如何区别的,其实如果直接使用SpringMVC是可以不添加applic ...
- tomcat项目快速启动设置
1.现象:tomcat启动项目时,耗费10几秒的时间 2.(tomcat7)解决:打开$JAVA_HOME/jre/lib/security/java.security这个文件 找到下面的内容:sec ...
- web站点检查简易shell脚本
1.web样式 <h4>THE STATUS OF RS:</h4> <meta http-equiv="> <table border=" ...
- rest_framework之序列化详解 06
拿到所有的角色数据 1.urls.py 2.models.py 假设只有3个角色 3.views.py from api import models import json json只能序列化pyt ...
- 170508、忘记jenkins密码或者修改jenkins密码
刚配置好jenkins时,不知道密码是什么,很多同学都有这种烦恼把,各种抓狂. 操作步骤: 1.进入jenkins用户目录 cd /home/rick/.jenkins/users/admin ps ...