POJ 1185 炮兵阵地 最2的错误出现了
来源:互联网 发布:mac如何下载美服lol 编辑:程序博客网 时间:2024/05/22 04:59
知道什么是1 ,什么是0.
题意:求一个棋盘中最多可以放几个十字(十字尺寸一定,宽度为一格)。
做法:压缩一下就可以了,较水,只是,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[n][i][j]); printf("%d\n",ans); } return 0;}
- POJ 1185 炮兵阵地 最2的错误出现了
- poj 1185 炮兵阵地
- POJ 1185 炮兵阵地
- poj 1185炮兵阵地
- poj 1185 炮兵阵地
- poj 1185 炮兵阵地
- poj 1185 炮兵阵地
- poj 1185 炮兵阵地
- POJ-1185-炮兵阵地
- POJ 1185 炮兵阵地
- poj 1185 炮兵阵地
- POJ 1185 炮兵阵地
- poj 1185炮兵阵地
- poj 1185 炮兵阵地
- poj 1185 炮兵阵地
- POJ 1185 炮兵阵地
- POJ 1185 炮兵阵地
- poj 1185 炮兵阵地
- Oracle几种查找和删除重复记录的方法总结
- linux 服务
- hdu 1829 并查集
- 第二周JAVA上机实验(三)猜数游戏
- 关于#pragma push_macro("new")
- POJ 1185 炮兵阵地 最2的错误出现了
- 系统学Javascript——基本语法
- Flashback Data Archive(转)
- 根据两点经纬度计算两点间的距离图
- 自己动手写内存分配函数malloc
- Oracle 11g新特性:Result Cache
- 将客户端脚本合并到复合脚本中
- lower_bound and upper_bound 返回
- 苹果iPhone 5高清全图集欣赏