吃土豆
时间限制:1000 ms | 内存限制:65535 KB
难度:4
描述
Bean-eating is an interesting game, everyone owns an M*N matrix, which isfilled with different qualities beans. Meantime, there is only one bean in any1*1 grid. Now you want to eat the beans and collect the qualities, but everyonemust obey by the following rules: if you eat the bean at the coordinate(x, y),you can’t eat the beans anyway at the coordinates listed (if exiting): (x,y-1), (x, y+1), and the both rows whose abscissas are x-1 and x+1.
Now, how much qualities can you eat andthen get ?
输入
Thereare a few cases. In each case, there are two integer M (row number) and N(column number). The next M lines each contain N integers, representing thequalities of the beans. We can make sure that the quality of bean isn't beyond1000, and 1<=M,N<=500.
输出
Foreach case, you just output the MAX qualities you can eat and then get.
样例输入
4 6
11 0 7 513 9
78 4 81 622 4
1 40 9 3416 10
11 22 0 3339 6
样例输出
242
来源
2009 Multi-University Training Contest 4
上传者
#include<stdio.h>
int max(int m,int *a){
inti,f[510];
for(i=1;i<=m;i++)
{
if(i==1) f[i]=a[i];
elseif(i==2) f[i]=a[i]>a[i-1]?a[i]:a[i-1];
else
{
f[i]=(f[i-2]+a[i])>f[i-1]?f[i-2]+a[i]:f[i-1];
}
}
returnf[m];
}//非递归推算法
/*int max(int m,int *a){
if(m==1)returna[1];
if(m==2)returna[2]=a[1]>a[2]?a[1]:a[2];
returnmax(m-2,a)+a[m]>max(m-1,a)?max(m-2,a)+a[m]:max(m-1,a);
}*///递归分制算法(浪费时间)
int main(){
inta[510],b[510],i,j,m,n;
while(scanf("%d%d",&n,&m)==2)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%d",&a[j]);
}
b[i]=max(m,a);
}
printf("%d\n",max(n,b));
}
return0;
}