| ||||||||||
| 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