标签:字符 string 组成 灰色 其他 using jpg 技术 ++
5 4 PHPP PPHH PPPP PHPP PHHP
6
题解:
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int n,m,a[101],f[2][60][60],sum[60],st[60],cnt; int main(){ while(~scanf("%d%d",&n,&m)){ memset(a,0,sizeof(a)); memset(f,0,sizeof(f)); memset(st,0,sizeof(st)); memset(sum,0,sizeof(sum)); for(int i=0;i<n;i++){ getchar(); for(int j=0;j<m;j++) if((getchar())==‘H‘) a[i]|=(1<<j); } for(int i=0;i<(1<<m);i++) if((!(i&(i>>1)))&&(!(i&(i>>2)))){ st[cnt]=i; for(int x=i;x;x>>=1) if(x&1) sum[cnt]++; cnt++; } for(int i=0;i<cnt;i++) if(!(a[0]&st[i])) f[0][0][i]=sum[i]; int c=0; for(int l=1;l<n;l++){ c^=1; for(int i=0;i<cnt;i++) for(int j=0;j<cnt;j++) f[c][i][j]=0; for(int i=0;i<cnt;i++)if(!(a[l]&st[i])) for(int j=0;j<cnt;j++)if(!(st[i]&st[j])) for(int k=0;k<cnt;k++)if(!(st[i]&st[k])) f[c][k][i]=max(f[c][k][i],f[c^1][j][k]+sum[i]); } int ans=0; for(int i=0;i<cnt;i++) for(int j=0;j<cnt;j++) ans=max(ans,f[c][i][j]); printf("%d\n",ans); } return 0; }
标签:字符 string 组成 灰色 其他 using jpg 技术 ++
原文地址:http://www.cnblogs.com/keshuqi/p/6142939.html