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 ...
随机推荐
- C++primer 阅读点滴记录(二)
智能指针(smart point) 除了增加功能外,其行为像普通指针一样. 一般通过使用计数(use count)或引用计数(reference count)实现智能指针,防止出现指针 ...
- js验证表单大全
js验证表单大全 1. 长度限制 <script> function test() { if(document.a.b.value.length>50) { alert(" ...
- poj 2046 Gap
题目连接 http://poj.org/problem?id=2046 Gap Description Let's play a card game called Gap. You have 28 c ...
- 教你怎么安装MongoDB
以下命令以root用户运行:#sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10#echo 'deb http://do ...
- 使用spring dynamic modules的理由
spring的主要功能 spring框架提供了轻量级的容器和非侵入式的编程模型,这来自于其依赖注入.AOP和便携服务概念. osgi的主要功能 osgi服务平台提供了动态的应用程序执行环境,支持模块( ...
- MySQL 触发器简单实例
~~语法~~ CREATE TRIGGER <触发器名称> --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.{ BEFORE | ...
- json转换对象
JSON.parse(jsonstr); //可以将json字符串转换成json对象 JSON.stringify(jsonobj); //可以将json对象转换成json对符串
- Android facebook-android-sdk-3.5.2 FQL
android平台下使用Facebook 3.5.2的SDK实践 步骤总结: 1.引用SDK 在Facebook官网下载最新版的SDK,解压. 打开Eclipse, 'File' -> 'Imp ...
- 利用FormsAuthentication.RedirectFromLoginPage进行身份验证
web.config中: <authentication>节 格式: <authentication mode="Forms"> //I.Window ...
- Eclipse快捷键壁纸-0基础必备