HDU ACM 2845 Beans->动态规划

意甲冠军:

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 ",sum); } return 0; }



原文地址:https://www.cnblogs.com/lcchuguo/p/5050228.html