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