| ||||||||||
| 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 | |||||||||
真心给跪了,大神救救我啊N=1的情况是对的,楼下大神们给的测试数据(100行的,99行的)也都是对的,无论代码是输入一组数据还是多组数据也都试过,可是就是是wrong answer 纠结啊,哪位大神帮我看看吧,支支招,万分感谢
附上代码
#include<iostream>
using namespace std;
const int Ma=1000;
int jg[101][65][65];
int s[101][63];
int sum[101][63];
int map[101];
int N,M,num;//N代表行M代表列
bool judge(int a,int b)
{
if( (b & map[a])!=b)
return false;
if(b & (b<<1)) return false;
if(b & (b<<2)) return false;
return true;
}
int get(int j)
{
int i=0;
while(j)
{
if((j & 1))
i++;
j>>=1;
}
return i;
}
bool panduan(int x,int y,int z)
{
if(x & y) return false;
if(x & z) return false;
return true;
}
int main()
{
while(cin>>N>>M)
{
//cin>>N>>M;
int i,j,x,y,k;
memset(map,0,sizeof(map));
memset(jg,0,sizeof(jg));
memset(s,0,sizeof(s));
memset(sum,0,sizeof(sum));
s[0][0]=s[1][0]=1;
for(i=2;i<=N+1;i++)
for(j=1;j<=M;j++)
{
char c;cin>>c;
if(c=='P') k=1;
else k=0;
map[i]=(map[i]<<1)+k;//存储在MAP的2到N+1个中
}
for(i=2;i<=N+1;i++)
{
k=1;
for(j=0;j<(1<<M);j++)
if(judge(i,j))
{
s[i][k]=j;
sum[i][k++]=get(j);
}
s[i][0]=k-1;
}
for(i=2;i<=N+1;i++)
for(j=1;j<=s[i][0];j++)//s[i][0]表示第i行有多少种状态
for(x=1;x<=s[i-1][0];x++)
for(y=1;y<=s[i-2][0];y++)
if(panduan(s[i][j],s[i-1][x],s[i-2][y]))
{
int t=sum[i][j]+jg[i-1][x][y];
if(t>jg[i][j][x]) jg[i][j][x]=t;
}
int g=0;
for(i=1;i<=s[N+1][0];i++)
for(j=1;j<=s[N][0];j++)
if(g<jg[N+1][i][j])
g=jg[N+1][i][j];
cout<<g<<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