#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int num[1000055];
int now[1000055];
int pop[1000055];
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int m,n,i,j,k;
while(scanf("%d%d",&m,&n)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%d",&num[i]);
memset(now,0,sizeof(now));
memset(pop,0,sizeof(pop));
int maxn=(-1)*(0x7fffffff);
for(i=1;i<=m;i++)
{
maxn=(-1)*(0x7fffffff);
for(j=i;j<=n;j++)
{
now[j]=max(now[j-1]+num[j],pop[j-1]+num[j]);
//if(maxn>pop[j-1]) 加了会WA
pop[j-1]=maxn;
if(now[j]>maxn)
maxn=now[j];
}
}
printf("%d\n",maxn);
}
}
题解都看不懂,代码先贴这,以后再看吧: