poj 1185 炮兵阵地 状压DP
来源:互联网 发布:ubuntu终端安装deb 编辑:程序博客网 时间:2024/05/16 12:37
时空隧道
分析:
因为当前这一行怎么填1只和上一行and上上一行有关系,所以状态和转移方程很好想:
f[i][j][k]代表当前第i行状态为k上一行状态为j的最多的1,所以我们可以得到转移方程如下:
f[i][j][k]=max(f[i-1][t][j]+num[k])num[k]代表状态k有多少个1
只要判断一下jkt是否合法就好啦
然而我很脑残的没有计算时间和空间,所以TLE了一次MLE了一次
因为同一行中每两个1之间最少有两个格子,所以有很多状态是浪费的,所以我们提前预处理出合法状态只有60个左右,大大降低了时间和空间复杂度
代码如下:
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int maxn=100+5,maxm=10+5;int n,m,f[2][65][65],num[65],ans=0,state[65],cnt;char mp[maxn][maxm];inline bool check1(int pos,int x){ for(int i=1;i<=m;i++) if(((1<<(i-1))&x)&&mp[pos][i]=='H') return false; return true;}inline bool check2(int x,int y){ for(int i=1;i<=m;i++) if((x&(1<<i-1))&&(y&(1<<i-1))) return false; return true;}inline int calc(int x){ int sum=0; for(int i=1;i<=m;i++) if(x&(1<<i-1)) sum++; return sum;}signed main(void){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%s",mp[i]+1); cnt=0; for(int i=0;i<(1<<m);i++) if(!(i&(i<<1))&&!(i&(i<<2))) state[++cnt]=i,num[cnt]=calc(i); memset(f,-1,sizeof(f)); int lala=0; for(int i=1;i<=cnt;i++) if(check1(1,state[i])) f[lala][1][i]=num[i]; for(int i=2;i<=n;i++){ lala^=1; for(int j=1;j<=cnt;j++) if(check1(i,state[j])) for(int k=1;k<=cnt;k++) if(check1(i-1,state[k])) if(check2(state[j],state[k])) for(int t=1;t<=cnt;t++) if(check2(state[j],state[t])) if(f[lala^1][t][k]!=-1) f[lala][k][j]=max(f[lala][k][j],f[lala^1][t][k]+num[j]); } for(int i=1;i<=cnt;i++) for(int j=1;j<=cnt;j++) ans=max(ans,f[lala][i][j]); cout<<ans<<endl; return 0;}
by >_< neighthorn
1 0
- POJ 1185--炮兵阵地(状压dp)
- poj 1185 炮兵阵地 状压DP
- POJ 1185 炮兵阵地 (状压DP)
- POJ 1185 炮兵阵地(状压dp)
- 炮兵阵地 - POJ 1185 状压dp
- POJ 1185 炮兵阵地(状压DP)
- poj 1185 炮兵阵地 状压DP
- POJ 1185-炮兵阵地(状压DP)
- POJ 1185 炮兵阵地 (状压DP)
- POJ 1185 炮兵阵地(状压dp)
- poj 1185 炮兵阵地 状压dp
- poj 1185 炮兵阵地 【状压DP】
- poj 1185 炮兵阵地(状压DP)
- POJ 1185 炮兵阵地 状压DP
- poj 1185 炮兵阵地(状压dp)
- POJ 1185 炮兵阵地 (状压dp)
- poj 1185 炮兵阵地 状压dp
- 【POJ 1185】炮兵阵地(状压DP)
- Implementing Apriori Algorithm in
- idea 插件的使用 进阶篇(个人收集使用中的)
- 检查堆栈溢出的实验
- 虚析构函数
- ARC 下代理产生内存泄漏的情况
- poj 1185 炮兵阵地 状压DP
- 继承NSOperation-自定义同步 operation
- 蓝鸥Unity开发教程之课时3 Terrain地形系统
- Ubuntu系统中安装RPM格式包的方法
- K3.BOS插件开发记录
- anddroid异常处理之UncaughtException
- PowerDesigner逆向工程导入MYSQL数据库总结
- 自动布局之autoresizingMask使用详解(Storyboard&Code)
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据