//hdu Max Sum Plus Plus(动态规划+分段最大子段和)
#include<cstdio>
#include<iostream>
using namespace std;
#define N 1000000+10
#define INF 0x7fffffff
int dp[N];
int mmax[N];//mmax[i]前i个的最大子段和
int a[N];
int Max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int n,m;
int i,j,ansmax;//ansmax存取最大分段子段和
while(scanf("%d%d",&m,&n)==2)
{
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
mmax[i]=0;
dp[i]=0;
}
dp[0]=0;
mmax[0]=0;
//==============核心代码===========
for(i=1;i<=m;i++)
{
ansmax=-INF;
for(j=i;j<=n;j++)
{
dp[j]=Max(dp[j-1]+a[j],mmax[j-1]+a[j]);
mmax[j-1]=ansmax;
ansmax=Max(ansmax,dp[j]);
}
}
//===============================
printf("%d\n",ansmax);
}
return 0;
}
hdu Max Sum Plus Plus(动态规划+分段最大子段和)
最新推荐文章于 2021-02-23 16:14:37 发布