Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
wa?#include <iostream> #include <cmath> using namespace std; const int large=(1<<10); int n,m; int stack[large],len=0; char map[105][15]; int dp[60][60][101]; int Fun(int now,int last,int n) { int s=0,tmp; tmp=stack[now]|stack[last]; if(dp[now][last][n]!=-1)return dp[now][last][n]; int i,j; for(i=0;i<m;i++) { if((stack[now]&(~(1<<i)))!=stack[now])s++; } if(n==1) {dp[now][last][n]=s;return s;} int MAX=0; for(i=0;i<len;i++) { int flag=1; if(stack[i]&tmp)continue; for(j=0;j<m;j++) { if(map[n-2][j]=='H'&&(stack[i]&(~(1<<j)))!=stack[i]) { flag=0;break; } } if(flag){int t=Fun(last,i,n-1);if(MAX<t)MAX=t;} } MAX+=s; dp[now][last][n]=MAX; return MAX; } bool OK(int a) { if(a<0||a>=m)return false; return true; } int main() { freopen("input.txt","r",stdin); cin>>n>>m; len=0; int i,k,j; int power; int MAX=0; for(i=0;i<m;i++)map[0][i]='H'; for(i=1;i<=n;i++){cin>>map[i];} power=(1<<m); for(i=0;i<power;i++) { int flag=0; for(j=0;j<m;j++) { if((i&(~(1<<j)))!=i) { if(OK(j-1)&&(i&(~(1<<j-1)))!=i) {flag=1;break;} if(OK(j-2)&&(i&(~(1<<j-2)))!=i) {flag=1;break;} if(OK(j+1)&&(i&(~(1<<j+1)))!=i) {flag=1;break;} if(OK(j+2)&&(i&(~(1<<j+2)))!=i) {flag=1;break;} } } if(!flag)stack[len++]=i; } for(i=0;i<60;i++) for(j=0;j<60;j++) for(k=0;k<101;k++) dp[i][j][k]=-1; for(i=0;i<len;i++) for(j=0;j<len;j++) { int flag=1; if(stack[i]&stack[j])continue; for(k=0;k<m;k++) { if(map[n][k]=='H'&&(stack[i]&(~(1<<k))!=stack[i])) { flag=0;break;} if(map[n-1][k]=='H'&&(stack[j]&(~(1<<k))!=stack[j])) { flag=0;break;} } if(flag) {int t=Fun(i,j,n);if(MAX<t)MAX=t;}; } cout<<MAX<<endl; return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator