POJ 1185 炮兵阵地 最2的错误出现了
2012-09-13 21:00
246 查看
知道什么是1 ,什么是0.
题意:求一个棋盘中最多可以放几个十字(十字尺寸一定,宽度为一格)。
做法:压缩一下就可以了,较水,只是,2了一下。。。。
题意:求一个棋盘中最多可以放几个十字(十字尺寸一定,宽度为一格)。
做法:压缩一下就可以了,较水,只是,2了一下。。。。
#include<stdio.h> #include<string.h> int dp[105][65][65]; int state[65],get[65],blo[105]; int n,m,all,ret; inline int max(int a,int b) { return a>b?a:b; } void dfs(int lie,int s) { if(lie>=m) { for(int i=0;i<lie;i++) if(1<<i&s)get[all]++; state[all++]=s; return ; } dfs(lie+1,s); dfs(lie+3,s|1<<lie);//应该是加3!!!T_T } int main() { int i,j,k,t,ans; char clo[15]; while(scanf("%d%d",&n,&m)!=EOF) { all=0; memset(blo,0,sizeof(blo)); memset(dp,-1,sizeof(dp)); memset(get,0,sizeof(get)); ret=-1; dfs(0,0); for(i=1;i<=n;i++) { scanf("%s",clo); for(j=0;j<m;j++) if(clo[j]=='H') blo[i]=blo[i]|1<<j; } for(i=0;i<all;i++) if((blo[1]&state[i])==0) dp[1][0][i]=get[i]; if(n>1) { for(i=2;i<=n;i++) for(j=0;j<all;j++) if((blo[i]&state[j])==0) for(k=0;k<all;k++) if((state[j]&state[k])==0) for(t=0;t<all;t++) if((state[t]&state[k])==0&&(state[t]&state[j])==0) dp[i][k][j]=max(dp[i][k][j],dp[i-1][t][k]+get[j]); } ans=0; for(i=0;i<all;i++) for(j=0;j<all;j++) ans=max(ans,dp [i][j]); printf("%d\n",ans); } return 0; }
相关文章推荐
- poj 1185 炮兵阵地 (状态压缩)
- POJ 1185 炮兵阵地 HDU 4539 郑厂长系列故事——排兵布阵
- Poj 1185 炮兵阵地 状态压缩
- POJ - 1185 炮兵阵地 (状态压缩)
- poj-1185 炮兵阵地(状压dp)
- poj 1185 炮兵阵地(经典状态压缩dp)
- POJ 1185 炮兵阵地(动态规划+状态压缩)
- poj 1185 炮兵阵地 【状态压缩dp】
- POJ1185 炮兵阵地 (状态压缩DP)
- POJ【1185】——炮兵阵地
- Poj-1185 & Nyoj-81 炮兵阵地 (状态压缩动态规划经典题
- poj 1185 炮兵阵地
- POJ 1185 炮兵阵地 状态压缩dp
- POJ 1185 炮兵阵地 (状压DP)
- poj 1185 炮兵阵地(状态压缩dp)
- dp(poj1185 炮兵阵地)
- POJ1185 炮兵阵地 【状压dp】
- [NOI2001][POJ1185]炮兵阵地(状压dp)
- Poj 1185/Hrbust 1844 炮兵阵地【状压dp】
- POJ1185 炮兵阵地