现在的位置: 首页 > 综合 > 正文

hdu 2845 Beans–二维DP

2013年08月18日 ⁄ 综合 ⁄ 共 554字 ⁄ 字号 评论关闭
/*
题意:从格子里取数字,取了当前数字,则前一个后一个都不能取,前一行后一行也不能取

看别人的  DP
先是对每行DP   f[i]=max(f[i-2]+a[i],f[i-1])
每行计算过后,再对每行的结果进行这样的DP

这题很巧  对每行来说,其中的每个元素不能取其前面的和后面的
把行当做元素,那么这个矩阵也是一行,某行取了数,则其前一行和后一行不能取
模型一样 
*/
#include<stdio.h>
#include<string.h>
int a[200010],dp1[200010],dp2[200010];
int m,n;
int max(int a,int b){return a>b?a:b;}
int dp(int dd[],int g)
{
	int i;
	dp1[0]=0;
	dp1[1]=dd[1];
	for(i=2;i<=g;i++)
		dp1[i]=max(dp1[i-2]+dd[i],dp1[i-1]);
	return dp1[g];
}
int main()
{	
	int i,j;
	while(scanf("%d%d",&m,&n)!=EOF)
	{
		dp2[0]=0;
		for(i=1;i<=m;++i)
		{
			for(j=1;j<=n;++j)
				scanf("%d",&a[j]);
			dp2[i]=dp(a,n);
		}
		printf("%d\n",dp(dp2,m));
	}
}

抱歉!评论已关闭.