杭电1024----Max Sum Plus Plus

时间:2022-04-11 13:28:29
 /*
这题还没有理解透彻。某个dalao也不写注释。只能自己理解了。。。
先求为i个元素(1<=i<=M)为一个区间的最大和,保证元素个数大于等于i个,递推到M个即可
借鉴原址:http://blog.csdn.net/java_wliang/article/details/14214303
欢迎讨论
*/
#include<cstdio>
#define maxn 1000005
#define inf 1<<30
#define Max(a,b) (a)>(b)?(a):(b)
int d[maxn],m[maxn],a[maxn];
void init(int n)
{
for(int i=; i<n; ++i)
d[i] = m[i] = ;
}
int main()
{
int n,M,ans;
while(~scanf("%d%d",&M,&n) && n+M)
{
init(n);
for(int i=; i<=n; ++i)
scanf("%d",&a[i]);
for(int i=; i<=M; ++i)
{
ans = -inf;
for(int j=i; j<=n; ++j)
{
d[j] = Max(d[j-]+a[j],m[j-]+a[j]);
m[j-] = ans;
ans = Max(ans,d[j]);
}
}
printf("%d\n",ans);
}
return ;
}