1 /*
2 这题还没有理解透彻。某个dalao也不写注释。只能自己理解了。。。
3 先求为i个元素(1<=i<=M)为一个区间的最大和,保证元素个数大于等于i个,递推到M个即可
4 借鉴原址:http://blog.csdn.net/java_wliang/article/details/14214303
5 欢迎讨论
6 */
7 #include<cstdio>
8 #define maxn 1000005
9 #define inf 1<<30
10 #define Max(a,b) (a)>(b)?(a):(b)
11 int d[maxn],m[maxn],a[maxn];
12 void init(int n)
13 {
14 for(int i=0; i<n; ++i)
15 d[i] = m[i] = 0;
16 }
17 int main()
18 {
19 int n,M,ans;
20 while(~scanf("%d%d",&M,&n) && n+M)
21 {
22 init(n);
23 for(int i=1; i<=n; ++i)
24 scanf("%d",&a[i]);
25 for(int i=1; i<=M; ++i)
26 {
27 ans = -inf;
28 for(int j=i; j<=n; ++j)
29 {
30 d[j] = Max(d[j-1]+a[j],m[j-1]+a[j]);
31 m[j-1] = ans;
32 ans = Max(ans,d[j]);
33 }
34 }
35 printf("%d\n",ans);
36 }
37 return 0;
38 }