1 solutions
-
1
100 Wrong Answer
#include<bits/stdc++.h> using namespace std; int n,m,k,dh[1024],dh_sum[1024],dp[110][1024][1024],ans,_map[110]; int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ char str[103]; scanf("%s",str); for(int j=0;j<m;j++)if(str[j]=='H')_map[i]+=1<<j; } //单行初始化 for(int i=0;i<=(1<<m)-1;++i) if(((i&(i<<1))==0)&&((i&(i<<2))==0)&&((i&(i>>1))==0)&&((i&(i>>2))==0)){ dh[++k]=i; dh_sum[k]=__builtin_popcount(i); if((i&_map[1])==0)dp[1][0][k]=dh_sum[k]; } //第二行初始化 for(int i=1;i<=k;++i) for(int j=1;j<=k;++j) if(((dh[i]&dh[j])==0)&&((dh[j]&_map[2])==0))dp[2][i][j]=max(dp[2][i][j],dp[1][0][i]+dh_sum[j]); //dp for(int i=3;i<=n;i++) for(int j=1;j<=k;++j) if((_map[i]&dh[j])==0) for(int p=1;p<=k;p++) if((dh[p]&dh[j])==0) for(int q=1;q<=k;q++) if(((dh[q]&dh[p])==0)&&((dh[q]&dh[j])==0))dp[i][p][j]=max(dp[i][p][j],dp[i-1][q][p]+dh_sum[j]); //输出 for(int i=1;i<=k;i++) for(int j=1;j<=k;j++) ans=max(dp[n][i][j],ans); cout<<ans; return 0; }
- 1
Information
- ID
- 404
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 8
- Tags
- # Submissions
- 25
- Accepted
- 4
- Uploaded By