码迷,mamicode.com
首页 > 其他好文 > 详细

HDU ACM 2845 Beans->动态规划

时间:2015-03-14 20:08:03      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:c   c++   amp   dp   算法   

题意:

1、 对于每一行来说,相邻的数不可同时取;
2、同样对于列来说,相邻的行也不能同时取;

3、因此可得状态方程:dp[i]=dp[i-1]>(dp[i-2]+a[i])?dp[i-1]:dp[i-2]+a[i]。先对每一行运用,在对每一行求出的和作为一组运用,可得最终结果。


#include<iostream>   
using namespace std;  
  
int col[200001];
int dp[200001];

int GetMaxRow(int a[],int n)
{
	dp[0]=0;
	dp[1]=a[1];

	for(int i=2;i<=n;i++)
		dp[i]=dp[i-1]>(dp[i-2]+a[i])?dp[i-1]:dp[i-2]+a[i];
	return dp[n];
}

int main()  
{ 
	int m,n,i,j;
	int a[200001],sum;

	while(scanf("%d%d",&m,&n)==2)
	{
		for(j=1;j<=m;j++)
		{
			for(i=1;i<=n;i++)
				scanf("%d",&a[i]);
			col[j]=GetMaxRow(a,n);
		}
		sum=GetMaxRow(col,m);
		printf("%d\n",sum);
	}
    return 0;  
}


HDU ACM 2845 Beans->动态规划

标签:c   c++   amp   dp   算法   

原文地址:http://blog.csdn.net/a809146548/article/details/44261913

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!