状态压缩的好题,直接求会爆内存,先把所有可能的状态求出来存在stk里,然后f[i][k][t]表示i行状态为t,i-1状态为k,由i-1状态来推出i状态即可

注意要打好边际条件的状态,并且某个可行状态必须由前一个可行状态推出

/*
f[i][k][t]表示第i行状态为t,第i-1行状态为k的炮兵数
边际条件:第一行为任意可行状态即dp[1][1][i]=num[i]
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 110
char a[maxn][maxn];
int stk[maxn],cur[maxn],num[maxn],f[maxn][maxn][maxn];
int n,m,top;
inline bool legal(int x){//检查该状态是否会互相攻击
if(x&(x<<))return false;
if(x&(x<<))return false;
return true;
}
inline bool fit(int x,int k){//检查第k行在x状态下是否在山地上
if(x&cur[k])return false;
return true;
}
inline void init(){//预处理,将合法的st存入stk中
top=;
for(int i=;i<=(<<m)-;i++)
if(legal(i))stk[++top]=i;
}
inline int jcount(int x){//计数
int cnt=;
while(x>){cnt++;x&=(x-);}
return cnt;
}
int main(){
cin>>n>>m;
init();
for(int i=;i<=n;i++){
scanf("%s",a[i]+);
for(int j=;j<=m;j++)
if(a[i][j]=='H')
cur[i]+=(<<(m-j));//有山地的位置就是1
}
memset(f,-,sizeof f);
for(int i=;i<=top;i++){//预处理第一行
num[i]=jcount(stk[i]);
if(fit(stk[i],))f[][][i]=num[i];//如果这种状态可以放在第一行,那就摆下
for(int j=;j<=top;j++)f[][j][i]=;//第二行开始炮兵数设置为0
} for(int i=;i<=n;i++)
for(int t=;t<=top;t++){//枚举当前行的状态
if(!fit(stk[t],i))continue;//第i行不能放状态stk[t]
for(int j=;j<=top;j++){//枚举i-2行的状态
if(stk[t]&stk[j] || stk[j]&cur[i-])continue;
for(int k=;k<=top;k++){
if(stk[t]&stk[k] || stk[j]&stk[k] || stk[k]&cur[i-])continue;
if(f[i-][j][k]==-)continue;//i-1行的这种状态不可达
f[i][k][t]=max(f[i][k][t],f[i-][j][k]+num[t]);
}
}
}
int ans=;
for(int i=;i<=top;i++)
for(int j=;j<=top;j++)
ans=max(ans,f[n][i][j]);
cout<<ans<<endl;
}

poj1185 状态压缩经典题的更多相关文章

  1. hdu 2167(状态压缩基础题)

    题意:给你一个矩阵,让你在矩阵中找一些元素使它们加起来和最大,但是当你使用某一个元素时,那么这个元素周围的其它八个元素都不能取! 分析:这是一道比较基础的状态压缩题,也是我做的第三道状态压缩的题,但是 ...

  2. hdu 1565(状态压缩基础题)

    题意:容易理解. 分析:这是我做的状态压缩第二题,一开始超内存了,因为数组开大了,后来超时了,因为能够成立的状态就那么多,所以你应该先把它抽出来!!总的来说还是比较简单的!! 代码实现: #inclu ...

  3. poj 3254(状态压缩基础题)

    题意:就是你给一个n行m列的矩阵,矩阵里的元素由0和1组成,1代表肥沃的土地可以种植作物,0则不可以种植作物,并且相邻的土地不能同时种植作物,问你有多少种种植方案. 分析:这是我做的第一道状态压缩dp ...

  4. POJ1185状态压缩DP

    难得的中文题. POJ1185http://poj.org/problem?id=1185 方法就是用DP[i][r][p]表示第i行状态为r,第i-1行状态是p时的最多个数.而这里p受到r的限制,而 ...

  5. hdu4064 三进制状态压缩 好题!

    还不太会做这类题,总之感觉有点难啊. 用深搜代替打表求出一行所有的可行状态,注意要进行剪枝 这是自己理解的代码,但是tle了 #include<bits/stdc++.h> using n ...

  6. Traveling by Stagecoach 状态压缩裸题

    Traveling by Stagecoach dp[s][v]  从源点到达  v,状态为s,v的最小值.  for循环枚举就行了. #include <iostream> #inclu ...

  7. HDU 1429 胜利大逃亡(续)(bfs+状态压缩,很经典)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  8. 状态压缩DP总结

    POJ1185 炮兵部队问题: 在平原上才能放置炮兵,每个炮兵的上下左右2格之内都不能出现别的炮兵 可以考虑在当前行放置炮兵它的右侧和下侧绝对不会出现炮兵即可,左侧和上侧就能省去考虑 明显的状态压缩d ...

  9. POJ 3254 Corn Fields(状态压缩)

    一道状态压缩的题,错了好多次....应该先把满足的情况预处理出来 #include<iostream> #include<cstdio> #include<cstring ...

随机推荐

  1. 请求神器 postman安装

    1. 先下载postman(http://pan.baidu.com/s/1pLERz5p 密码:aqy2) 2.将你的包存放在文件夹中 列如名称为postman 3.在Chrome的地址栏中输入:c ...

  2. OGG初始化之使用Oracle Data Pump加载数据

    此方法使用Oracle Data Pump实用程序来建立目标数据.将副本应用于目标后,您将记录副本停止的SCN.包含在副本中的交易将被跳过以避免完整性违规冲突.从流程起点,Oracle GoldenG ...

  3. NIO相关

    Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/G ...

  4. 阿里云ECS CentOS 7 安装图形化桌面

    CentOS 7 系统下,本文以 MATE 桌面环境安装进行安装配置说明: 1 . 安装 X Window System. yum groups install "X Window Syst ...

  5. Linux内存管理 (10)缺页中断处理【转】

    转自:https://www.cnblogs.com/arnoldlu/p/8335475.html 专题:Linux内存管理专题 关键词:数据异常.缺页中断.匿名页面.文件映射页面.写时复制页面.s ...

  6. HTTP笔记01-http相关的基础知识

    这个系列文章是阅读<图解HTTP>后写下的笔记 当我们在浏览器输入url,点击回车后,浏览器显示我们需要的web页面,那么,这个界面是如何产生的? 根据浏览器地址中输入的url,浏览器从相 ...

  7. 遇到一个json解码失败的问题

    今日批量导入游戏, 从别人接口拉去的字符串json_decode总是失败, 但是把log里面记录的解码失败的字符串copy出来单独解析,却可以成功. 排除了是字符编码的问题后, 还是不行, 百思不得其 ...

  8. struts2框架之OGNL(参考第三天学习笔记)

    ognl 1. 什么是ognl 对象图导航语言 Struts内置的表达式语言,它比EL要强大很多. ------------------ 2. 单独学习ognl * EL它操作的数据来自于:四大域:p ...

  9. 使用GeoServer导出地图数据GeoJSON并应用

    在项目中,需要使用乡镇街道的地图边界,之前一直使用的是百度地图或Echarts地图,其没有这部分行政区的数据,需要在第三方购买数据,其提供的是shp文件 主文件:counties.shp 索引文件:c ...

  10. 解决mysql 主从数据库同步不一致的方法

    接着上文 配置完Mysql 主从之后,在使用中可能会出现主从同步失败的情况. mysql> show slave status\G Slave_IO_Running: Yes Slave_SQL ...