题目要求选数和最大,选了这个数,这个数的上下两行和左右两个数就不能选了,不是上下左右那四个数。
那就先把每行的最大和(不相邻)算出来最为一个数,然后再同样的方法算一遍这几个数和最大,最后就是要求的和最大。
代码:
#include<stdio.h>
#include<string.h>
int a[200010],b[200010];
int Max(int x,int y)
{
return x>y?x:y;
}
int main()
{
int i,j,k;
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
a[0]=0;
b[0]=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%d",&a[j]);
if(j>=2) a[j]=Max(a[j-2]+a[j],a[j-1]);
}
b[i]=a[m];
if(i>=2) b[i]=Max(b[i-2]+b[i],b[i-1]);
}
printf("%d\n",b[n]);
}
return 0;
}