您的位置:首页 > 其它

NYOJ 234 吃土豆

2013-04-22 13:12 288 查看

吃土豆

时间限制:1000ms|内存限制:65535KB
难度:4

描述Bean-eatingisaninterestinggame,everyoneownsanM*Nmatrix,whichisfilledwithdifferentqualitiesbeans.Meantime,thereisonlyonebeaninany1*1grid.Nowyouwanttoeatthebeansandcollectthequalities,buteveryonemustobeybythefollowingrules:ifyoueatthebeanatthecoordinate(x,y),youcan’teatthebeansanywayatthecoordinateslisted(ifexiting):(x,y-1),(x,y+1),andthebothrowswhoseabscissasarex-1andx+1.



Now,howmuchqualitiescanyoueatandthenget?

输入Thereareafewcases.Ineachcase,therearetwointegerM(rownumber)andN(columnnumber).ThenextMlineseachcontainNintegers,representingthequalitiesofthebeans.Wecanmakesurethatthequalityofbeanisn'tbeyond1000,and1<=M,N<=500.输出Foreachcase,youjustoutputtheMAXqualitiesyoucaneatandthenget.样例输入
46
11075139
784816224
1409341610
1122033396

样例输出
242


//开始没考虑全面只考虑了一个dp,后来发现原来横着的最大和也是一个DP,题中用value[]数组来存放了………………


1#include<iostream>
2#include<memory.h>
3usingnamespacestd;
4#definemax(a,b)a>b?a:b
5intdp[505],value[505];
6intmain()
7{
8//freopen("in.txt","r",stdin);
9intm,n,i,j,x,y;
while(cin>>m>>n)
{
memset(dp,0,sizeof(dp));
memset(value,0,sizeof(value));
for(i=0;i<m;++i)
{
x=y=0;
for(j=0;j<n;++j)
{
cin>>value[j];
if(j==1)value[1]=max(value[0],value[1]);
if(j>1)
value[j]=max(value[j-1],value[j]+value[j-2]);
}
dp[i]=value[n-1];
}
dp[1]=max(dp[0],dp[1]);
for(i=2;i<m;++i)
dp[i]=max(dp[i-1],dp[i]+dp[i-2]);
cout<<dp[m-1]<<endl;
}
return0;
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: