讨论 / 题解.
席一鸣 2014-10-15 03:28:18
点我顶贴 收藏 删除
#include<iostream>

using namespace std;

main()

{

char c[1000][1000],o[1000][1000];

int r,l,t,i,k,a,b;

cin>>l>>r>>t;

for(i=0;i<r;i++)

cin>>c[i];

for(;t>1;t--)

{

for(i=0;i<r;i++)

for(k=0;k<l;k++)

o[i][k]=0;

for(i=0;i<r;i++)

for(k=0;k<l;k++)

if(c[i][k]=='1')

for(a=i-1;a<=i+1;a++)

{

if(a<0||a>=r)

continue;

for(b=k-1;b<=k+1;b++)

{

if(b<0||b>=l||(a==i&&b==k))

continue;

o[a][b]++;

}

}

for(i=0;i<r;i++)

for(k=0;k<l;k++)

if(c[i][k]=='1')

{

if(o[i][k]<2||o[i][k]>3)

c[i][k]='0';

}

else

if(o[i][k]==3)

c[i][k]='1';

}

for(i=0;i<r;i++)

cout<<c[i]<<endl;

}

#1 席一鸣@2014-10-15 03:27:39
回复 删除
……上面那个发错了,这个是正解。

#include<iostream>

using namespace std;

int d[55][55][55][55],i,j,k,l,m,n,map[200][200];

main()

{

cin>>m>>n;

for(i=1;i<=m;i++)

for(j=1;j<=n;j++)

cin>>map[i][j];

for(i=1;i<=m;i++)

for(j=1;j<=n;j++)

for(k=1;k<=m;k++)

for(l=1;l<=n;l++)

{

if(j==l||i==k)

continue;

d[i][j][k][l]=map[i][j]+map[k][l]+max(max(d[i-1][j][k-1][l],d[i-1][j][k][l-1]),max(d[i][j-1][k-1][l],d[i][j-1][k][l-1]));

}

cout<<max(d[m-1][n][m][n-1],d[m][n-1][m-1][n])+map[m][n];

}

查看更多回复
提交回复