HDU ACM 2845 Beans->动态规划

时间:2023-03-10 05:48:49
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\n",sum);
}
return 0;
}