状态压缩 DP | 搜索
2013-01-27 16:27
316 查看
hdu 2280(DP)
View Code
2
2
View Code
//22:54 #include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> using namespace std; const int N=110; int a ; int num ; int mp ; int dp [60][60]; int n,m,sz; void init() { sz=0; for (int i=0;i<(1<<m);i++){ if ((i&(i>>1))||(i&(i<<1))) continue; if ((i&(i>>2))||(i&(i<<2))) continue; if ((i&1) || (i&(1<<(m-1)))) continue; a[sz++]=i; // cout<<i<<" "; } // cout<<endl; // cout<<sz<<endl; for (int i=0;i<sz;i++){ num[i]=0; for (int j=0;j<m;j++) if (a[i]&(1<<j)) num[i]++; // cout<<num[i]<<" "; } // cout<<endl; } int main() { int maxn; // freopen("D:\in.txt","r",stdin); scanf("%d",&maxn); while (maxn--) { scanf("%d%d\n",&n,&m); for (int i=0;i<n;i++){ char s[10]; gets(s); mp[i]=0; for (int j=m-1;j>=0;j--){ if (s[j]=='#') mp[i]|=1<<(m-j-1); } } if (n<3){ printf("0\n"); continue; } init(); memset(dp,0,sizeof(dp)); for (int i=0;i<sz;i++){ if((mp[1]&a[i])||(mp[0]&a[i])||(mp[2]&a[i])) continue; if ((mp[1]&(a[i]>>1))||(mp[1]&(a[i]<<1))) continue; dp[1][i][0]=num[i]; } for (int c=2;c<n-1;c++){ for (int i=0;i<sz;i++){ if ((mp[c]&a[i])||(mp[c-1]&a[i])||(mp[c+1]&a[i]))continue; if ((mp[c]&(a[i]>>1))||(mp[c]&(a[i]<<1)))continue; for (int j=0;j<sz;j++){ if ((mp[c-1]&a[j])||(mp[c-2]&a[j])||(mp[c]&a[j]))continue; if ((mp[c-1]&(a[j]>>1))||(mp[c-1]&(a[j]<<1)))continue; for (int k=0;k<sz;k++){ if ((mp[c-2]&a[k])||(mp[c-1]&a[k]))continue; if ((mp[c-2]&(a[k]>>1))||(mp[c-2]&(a[k]<<1)))continue; if ((a[i]&a[j])||(a[j]&a[k])||(a[i]&a[k])) continue; if ((a[i]&(a[j]>>1))||(a[i]&(a[j]<<1)))continue; if ((a[j]&(a[k]>>1))||(a[j]&(a[k]<<1))) continue; dp[c][i][j]=max(dp[c-1][j][k]+num[i],dp[c][i][j]); } } } } int maxv=0; for (int i=0;i<sz;i++) { for (int j=0;j<sz;j++) { if (dp[n-2][i][j]>maxv) maxv=dp[n-2][i][j]; } } printf("%d\n",maxv); } return 0; }
2
2
相关文章推荐
- hdu4628 状态压缩搜索or状态dp
- hdu 4778 Gems Fight!【状态压缩,记忆化搜索dp】
- ACM HDU 1074 Doing Homework(位运算,搜索,状态压缩DP)
- codeforces 424E Colored Jenga (状态压缩,概率dp用hash记忆优化搜索)
- HDU 3811 Permutation 记忆化搜索 状态压缩 DP
- 两道状态压缩DP-- POJ 3254,HDU 1074
- hdu 2167 状态压缩DP
- 第一道 状态压缩dp
- HDOJ 5067Harry And Dig Machine(状态压缩DP)
- HDU 4284 Travel(状态压缩DP)
- CodeForces 903F Clear The Matrix (状态压缩dp)
- poj 1185(状态压缩dp)
- hdu5135(状态压缩dp)
- [poj3311]Hie with the Pie(Floyd+状态压缩DP)
- hdu1074之状态压缩dp
- 状态压缩 DP 学习笔记
- ACM学习历程—HDU1584 蜘蛛牌(动态规划 && 状态压缩 || 区间DP)
- HDU 1565 方格取数(1) (状态压缩DP入门题 2)(待更新)
- 状态压缩dp
- 一道状态压缩DP思想题