题目链接:https://vjudge.net/problem/HDU-1024
题目描述:求一个序列的m对最大子序列之和;
题目思路:http://blog.csdn.net/qiqi_skystar/article/details/50599816
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#define clean(i) memset(i,0,sizeof(i))
using namespace std;
const int maxn=1000100;
int a[maxn],dp[maxn],Max[maxn];
int main()
{
int m,n;
while(scanf("%d%d",&m,&n)!=EOF &&m &&n)
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
clean(dp);
clean(Max);
int maxx ;
for(int i=1;i<=m;i++)
{
maxx=-maxn;
for(int j=i;j<=n;j++)
{
dp[j]=max(dp[j-1]+a[j],Max[j-1]+a[j]);
Max[j-1]=maxx;
maxx=max(maxx,dp[j]);
}
}
printf("%d\n",maxx);
}
return 0;
}