hdu 1024 动态规划

题目链接: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;
}

猜你喜欢

转载自blog.csdn.net/ygl_6saltfish/article/details/79646162