炮兵阵地(POJ 1185状压dp)
题意:n*m地图'H'能放'p'不能放,布兵的方格上下左右不能布兵,给你地图求最大布兵数
分析:关系到前两行,所以dp[i][j][k]第i行状态为j,i-1行状态为k时的最大布兵数, 先求出所有可行的状态,统计出其布兵数。
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <string>
#include <cctype>
#include <complex>
#include <cassert>
#include <utility>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
#define lson l,m,rt<<1
#define pi acos(-1.0)
#define rson m+1,r,rt<<11
#define All 1,N,1
#define read freopen("in.txt", "r", stdin)
const ll INFll = 0x3f3f3f3f3f3f3f3fLL;
const int INF= 0x7ffffff;
const int mod = 1000000007;
int n,m,a[200],dp[110][200][200];
int num,sum[2000],cas[2000];
bool judge(int x){
return ((x<<1)&x)||((x<<2)&x)||((x>>1)&x)||((x>>2)&x);
}
int countnum(int x){
int t=0;
while(x){
if(x&1)t++;
x>>=1;
}
return t;
}
//求预处理所有可能的状态
void init(){
num=0;
for(int i=0;i<(1<<m);++i){
if(!judge(i)){
cas[num]=i;
sum[num++]=countnum(i);
}
}
}
void solve(){
init();
memset(dp,0,sizeof(dp));
for(int i=0;i<num;++i){
if(a[0]&cas[i])continue;
dp[0][i][0]=sum[i];
}
for(int i=1;i<n;++i){
//枚举当前状态
for(int j=0;j<num;++j){
if(cas[j]&a[i])continue;
//枚举符合条件的上一行状态
for(int k=0;k<num;++k){
if(cas[k]&a[i-1])continue;
if(cas[k]&cas[j])continue;
int maxv=-1;
for(int l=0;l<num;++l){
if((cas[l]&cas[k])||(cas[l]&cas[j]))continue;
maxv=max(maxv,dp[i-1][k][l]);
}
dp[i][j][k]=maxv+sum[j];
}
}
}
int maxn=-1;
for(int i=0;i<num;++i)
for(int j=0;j<num;++j){
maxn=max(maxn,dp[n-1][i][j]);
}
printf("%d\n",maxn);
}
int main()
{
char ch;
while(~scanf("%d%d",&n,&m)){
memset(a,0,sizeof(a));
for(int i=0;i<n;++i)
for(int j=0;j<m;++j){
cin>>ch;
if(ch=='H'){
a[i]|=(1<<j);
}
}
solve();
}
return 0;
}
炮兵阵地(POJ 1185状压dp)的更多相关文章
- poj 1185 状压dp+优化
http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 291 ...
- poj 1185(状压dp)
题目链接:http://poj.org/problem?id=1185 思路:状态压缩经典题目,dp[i][j][k]表示第i行状态为j,(i-1)行状态为k时最多可以放置的士兵个数,于是我们可以得到 ...
- 状压dp(B - 炮兵阵地 POJ - 1185 )
题目链接:https://cn.vjudge.net/contest/276236#problem/B 题目大意:略 具体思路:和我的上一篇写状压dp的思路差不多,不过就是这个题相当于上一个题的升级 ...
- POJ 3254 (状压DP) Corn Fields
基础的状压DP,因为是将状态压缩到一个整数中,所以会涉及到很多比较巧妙的位运算. 我们可以先把输入中每行的01压缩成一个整数. 判断一个状态是否有相邻1: 如果 x & (x << ...
- poj 1170状压dp
题目链接:https://vjudge.net/problem/POJ-1170 题意:输入n,表示有那种物品,接下来n行,每行a,b,c三个变量,a表示物品种类,b是物品数量,c代表物品的单价.接下 ...
- hdu 1185 状压dp 好题 (当前状态与上两行有关系)
/* 状压dp 刚开始&写成&&看了好长时间T0T. 状态转移方程 dp[i][k][j]=Max(dp[i][k][j],dp[i-1][l][k]+num[i][j]);( ...
- POJ 3254 状压DP
题目大意: 一个农民有一片n行m列 的农场 n和m 范围[1,12] 对于每一块土地 ,1代表可以种地,0代表不能种. 因为农夫要种草喂牛,牛吃草不能挨着,所以农夫种菜的每一块都不能有公共边. ...
- POJ 2411 状压DP经典
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 16771 Accepted: 968 ...
- poj 3254 状压dp入门题
1.poj 3254 Corn Fields 状态压缩dp入门题 2.总结:二进制实在巧妙,以前从来没想过可以这样用. 题意:n行m列,1表示肥沃,0表示贫瘠,把牛放在肥沃处,要求所有牛不能相 ...
随机推荐
- VisualSVN Server的windows 2003配置和使用方法(图文并茂)
1.为什么要用VisualSVN Server,而不用Subversion? 回答: 因为如果直接使用Subversion,那么在Windows 系统上,要想让它随系统启动,就要封装SVN Serve ...
- TortoiseSVN文件夹及文件图标不显示解决方法(转发)
地址:http://blog.csdn.net/lishehe/article/details/8257545 由于自己的电脑是win7(64位)的,系统安装TortoiseSVN之后,其他的功能都能 ...
- Windows JDK环境变量的配置
下载JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html 安装 计算机-->属性-->高级系统设置- ...
- 360抢票 网站维护中 && 你的登录被踢了!
本来在超市犹豫到底该买哪种暖手袋,犹豫了差不多半个多小时,还没决定好,一看时间还有8分钟到10点,遂狂奔回寝室抢票. 结果,360抢票被12306秒了—— 猜测原因是12306的验证码改了(变成动态的 ...
- C#基础精华----枚举
enums枚举是值类型,数据直接存储在栈中,而不是使用引用和真实数据的隔离方式来存储. (1)默认情况下,枚举中的第一个变量被赋值为0,其他的变量的值按定义的顺序来递增(0,12,3...),因此以下 ...
- python流程控制语句 ifelse - 2
#! /usr/bin/python x = input('please input a integer:') x = int (x) ): print('你输入了一个负数') else: print ...
- Android handler.obtainMessage()
在handler.obtainMessage()的参数是这样写的: Message android.os.Handler.obtainMessage(int what, int arg1, int a ...
- java对称加密(AES)
java对称加密(AES) 博客分类: Java javaAES对称加密 /** * AESHelper.java * cn.com.songjy.test * * Function: TODO * ...
- Tomcat 自动上传的删除文件
解决方案: 在 sever.xml 中的 Context 中建一个虚拟路径,指定到服务器硬盘中的其他位置,比如放在 d: 的某个目录下. 同时可以将这个路径映射成为你当前工程名后面带个目录,比如说 / ...
- BIND9配置文件详解模板[转载]
在CU上看到了一篇关于BIND9配置文件详解的文章,感觉不错,现转载了分享一下. //named.conf 注释说明 by shellyxz@163.com// 此文件对bind9的默认配置文件的说明 ...