poj1185 状态压缩~最值
来源:互联网 发布:他改变了中国 江在知乎 编辑:程序博客网 时间:2024/06/03 18:02
很经典的状态压缩题目,看了ppt然后去敲,两个多小时才查出状态判断时少加了数组,郁闷中刷了hdu4539 数组开小了查了一晚上,怎么说自己呢?唉。。。。
ACcode:
poj 1185
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>const int NS=111;int dp[2][NS][NS],g[NS];int s[NS],num[NS],top;int numone(int x){ int cnt=0; for (; x; cnt++,x=x&(x-1)); return cnt;}bool judge(int x){ if ((x<<1)&x) return false; if ((x<<2)&x) return false; return true;}void prepare(int k){ k=1<<k,top=0; for (int i=0; i<k; i++) { if (judge(i)) { num[top]=numone(i); s[top]=i,top++; } }}int Max(int a1,int a2){ return a1>a2?a1:a2;}void init(int x){ for (int j=0; j<top; j++) for (int k=0; k<top; k++) dp[x][j][k]=-1;}int main(){ char ch[20]; int n,m,res,now,pre; while (~scanf("%d%d",&n,&m)) { for (int i=0; i<n; i++) { g[i]=0; scanf("%s",ch); for (int j=0; j<m; j++) if (ch[j]=='H') g[i]|=(1<<j); } prepare(m),init(0); for (int i=0; i<top; i++) if (!(g[0]&s[i])) dp[0][i][0]=num[i]; res=now=0,pre=1; for (int i=1; i<n; i++) { init(pre); now=1-now,pre=1-pre; for (int x=0; x<top; x++) { if (s[x]&g[i]) continue; for (int j=0; j<top; j++) { if (s[x]&s[j]) continue; for (int k=0; k<top; k++) { if (s[x]&s[k]) continue; if (dp[pre][j][k]==-1) continue; dp[now][x][j]=Max(dp[now][x][j],dp[pre][j][k]+num[x]); } } } } for (int j=0; j<top; j++) for (int k=0; k<top; k++) res=Max(res,dp[now][j][k]); printf("%d\n",res); } return 0;}
HDU4359
#include<cstdio>#include<cstring>const int NS=200;int g[NS>>1],dp[NS>>1][NS][NS];int state[NS],num[NS],top;bool ok(int k){ if ((k<<2)&k) return false; return true;}int getnum(int k){ int cnt=0; for (;k;k&=(k-1),cnt++); return cnt;}void prepare(int k){ k=1<<k,top=0; for(int i=0; i<k; i++) { if(ok(i)) { state[top]=i; num[top++]=getnum(i); } }}int judge(int a,int b){ return ((b>>1)&a)+((b<<1)&a);}int Max(int a,int b){ return a>b?a:b;}int main(){ int n,m,t,res; while(scanf("%d%d",&n,&m)!=EOF) { prepare(m),res=0; memset(dp,-1,sizeof(dp)); for(int i=0; i<n; i++) { g[i]=0; for(int j=0; j<m; j++) { scanf("%d",&t); if(!t) g[i]|=(1<<j); } } for (int i=0;i<top;i++) if (!(g[0]&state[i])) dp[0][i][0]=num[i]; for (int y=1;y<n;y++) { for (int i=0;i<top;i++) { if (g[y]&state[i]) continue; for (int j=0;j<top;j++) { if (judge(state[i],state[j])) continue; for (int k=0;k<top;k++) { if (state[i]&state[k]) continue; if (dp[y-1][j][k]==-1) continue; dp[y][i][j]=Max(dp[y][i][j],dp[y-1][j][k]+num[i]); } } } } for (int i=0;i<top;i++) for (int j=0;j<top;j++) res=Max(res,dp[n-1][i][j]); printf("%d\n",res); } return 0;}
- poj1185 状态压缩~最值
- 状态压缩dp poj1185
- POJ1185+状态压缩DP
- poj1185 状态压缩Dp
- poj1185状态压缩DP
- poj1185(状态压缩)
- poj1185(状态压缩dp)
- Poj1185状态压缩
- POJ1185-状态压缩dp
- poj1185之状态压缩
- poj1185 状态压缩的dp
- poj3254 poj1185 状态压缩DP
- poj1185之状态压缩dp
- POJ1185:炮兵阵地(状态压缩)
- poj1185(状态压缩dp)
- 状态压缩DP POJ3254 && POJ1185
- [状态压缩]poj1185 炮兵阵地
- 状态压缩DP poj1185 炮兵阵地
- poj 1201/ZOJ 1508 Intervals 差分约束
- 第十一堂课后作业
- 计算机程序设计的史诗TAOCP
- Slf4j与Jboss-Logging整合
- Android 个人学习笔记之---SAX解析XML文件(有一个坑爹的问题)
- poj1185 状态压缩~最值
- Android Studio来了,它能取代Eclipse吗?
- zoj 1002
- 汇编语言学习视频
- 条码通用库PLLA
- 条码通用库PLLB
- 浮点数在计算机中的表示法与IEEE754
- iOS安全性和越狱
- Python字典的应用详解