poj 1185
上一题的升级版
dp[i][j][k] 表示第 i 行状态为 k 第i-1行状态为 j
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <vector>
#include <sstream>
#include <string>
#include <cstring>
#include <algorithm>
#include <iostream>
#define maxn 2005
#define INF 0x3f3f3f3f
#define inf 10000000
#define MOD 100000000
#define ULL unsigned long long
#define LL long long using namespace std; char g[110][15];
int dp[105][70][70], mapp[110], sta[70], cc[70];
int n, m, num; bool if_ok(int x) {
if(x & (x<<1)) return false;
if(x & (x<<2)) return false;
return true;
} int countone(int x) {
int ans = 0;
while(x) {
++ ans;
x = x&(x-1);
}
return ans;
} void init() {
memset(dp, -1, sizeof(dp));
memset(mapp, 0, sizeof(mapp));
num = 0;
for(int i = 0; i < (1<<m); ++ i) {
if(if_ok(i)) sta[num++] = i;
}
// printf("num : %d\n", num);
} int main()
{
while(scanf("%d%d", &n, &m) == 2) {
init();
// printf("ff: %d\n", num);
for(int i = 0; i < n; ++ i) {
scanf("%s", g[i]);
}
for(int i = 0; i < n; ++ i) {
for(int j = 0; j < m; ++ j) {
if(g[i][j] == 'H') mapp[i] = mapp[i] | (1<<j);
}
}
for(int i = 0; i < num; ++ i) {
cc[i] = countone(sta[i]);
if((mapp[0] & sta[i]) == 0) {
dp[0][0][i] = cc[i];
}
}
for(int i = 0; i < num; ++ i) {
if(mapp[1] & sta[i]) continue;
for(int j = 0; j < num; ++ j) {
if(sta[j]&sta[i]) continue;
if(dp[0][0][j] == -1) continue;
dp[1][j][i] = max(dp[1][j][i], dp[0][0][j]+cc[i]);
}
}
for(int i = 2; i < n; ++ i) {
for(int j = 0; j < num; ++ j) {
if(mapp[i] & sta[j]) continue;
for(int k = 0; k < num; ++ k) {
if(sta[k] & sta[j]) continue;
for(int q = 0; q < num; ++ q) {
if(sta[q] & sta[k] || sta[q] & sta[j]) continue;
if(dp[i-1][k][q] == -1) continue;
dp[i][q][j] = max(dp[i][q][j], dp[i-1][k][q]+cc[j]);
}
}
}
}
int ans = 0;
for(int i = 0; i < n; ++ i) {
for(int j = 0; j < num; ++ j) {
for(int k = 0; k < num; ++ k) {
ans = max(ans, dp[i][j][k]);
}
}
}
printf("%d\n", ans);
}
return 0;
}
poj 1185的更多相关文章
- POJ 1185 炮兵阵地(状压DP)
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 26426 Accepted: 10185 Descriptio ...
- POJ 1185 状态压缩DP 炮兵阵地
题目直达车: POJ 1185 炮兵阵地 分析: 列( <=10 )的数据比较小, 一般会想到状压DP. Ⅰ.如果一行10全个‘P’,满足题意的状态不超过60种(可手动枚举). Ⅱ.用DFS ...
- POJ 1185炮兵阵地 (状压DP)
题目链接 POJ 1185 今天艾教留了一大堆线段树,表示做不动了,就补补前面的题.QAQ 这个题,我第一次写还是像前面HDU 2167那样写,发现这次影响第 i 行的还用i-2行那样,那以前的方法就 ...
- poj 1185(状态压缩DP)
poj 1185(状态压缩DP) 题意:在一个N*M的矩阵中,‘H'表示不能放大炮,’P'表示可以放大炮,大炮能攻击到沿横向左右各两格,沿纵向上下各两格,现在要放尽可能多的大炮使得,大炮之间不能相互 ...
- 【简●解】POJ 1185,LG P2704【炮兵阵地】
POJ 1185,LG P2704[炮兵阵地] 状压经典入门. [传送门] POJ 1185 洛谷 P2704 [题目大意] 司令部的将军们打算在 \(N\times M\) 的网格地图上部署他们的炮 ...
- poj 1185 炮兵阵地(三维状态压缩dP)
题目:http://poj.org/problem?id=1185 思路: d[i][j][k]表示第i行的状态为第k个状态,第i-1行的状态为第j个状态的时候 的炮的数量. 1表示放大炮, 地形状态 ...
- POJ 1185 - 炮兵阵地 & HDU 4539 - 郑厂长系列故事——排兵布阵 - [状压DP]
印象中这道题好像我曾经肝过,但是没肝出来,现在肝出来了也挺开心的 题目链接:http://poj.org/problem?id=1185 Time Limit: 2000MS Memory Limit ...
- POJ 1185 炮兵阵地 状压dp
题目链接: http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K 问题描述 司令部的将军们打算在N*M ...
- poj 1185(状压dp)
题目链接:http://poj.org/problem?id=1185 思路:状态压缩经典题目,dp[i][j][k]表示第i行状态为j,(i-1)行状态为k时最多可以放置的士兵个数,于是我们可以得到 ...
- poj 1185 状压dp+优化
http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 291 ...
随机推荐
- Scut游戏服务器免费开源框架--快速开发(2)
Scut快速开发(2) Python脚本开发 1 开发环境 Scut Lib版本:5.2.3.2 需要安装的软件 a) IIS和消息队列(MSMQ) 进入控制面板,程序和功能 b) ...
- PAT乙级真题1003. 我要通过!(20)(解题)
“答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”. 得到“答案正确”的条件是: 1 ...
- oracle 约束
约束是表中列的属性,用来维护数据结构完整性的一种手段约束的种类:NOT NULLUNIQUEPARIAMRY KEYFOREIGN KEYCHECK enble validate 检查现有数据和新数据 ...
- hdu 2578 Dating with girls(1)
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2578 Dating with girls(1) Description Everyone in the ...
- android开发遇到SDK无法访问谷歌而安装不了的情况
遇到SDK无法访问谷歌而安装不了的情况 1.修改C:\Windows\System32\drivers\etc的HOSTS文件,添加 #google_android更新203.208.46.146 d ...
- Android HTTP session && cookie
HTTP协议与状态保持HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是 ...
- mysql存储过程执行权限问题
tags: mysql PROCEDURE 存储过程 definer SECURITY 权限 以下存储过程,限定了DEFINER为root,也就是root之外的账户是无法调用这个存储过程的. 1 2 ...
- ExtJs4学习MVC中的Store
Ext.data.Store是extjs中用来进行数据交换和数据交互的标准中间件,无论是Grid还是ComboBox,都是通过它实现数据读取.类型转换.排序分页和搜索等操作的. 1 2 3 4 5 6 ...
- Some Tips About VS2015
Xaml edit bug about vs2013+ sometimes, vs will say some class not found in the namespace. but, we co ...
- Ubuntu 12.04 Desktop配置XAMPP【转】
转载:[ubuntu][xampp]开发环境配置 XAMPP 并不适用于生产环境,而仅供开发环境使用.XAMPP 被设置为尽量开放,并提供开发者任何他/她想要的功能.这对于开发环境来说是很棒的,但对于 ...