标签:
#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; const int N=1000010; const int INF=0x3f3f3f3f; int a[N], dp[N], Max[N]; ///dp[j]存放前j个数分组后的最大值,Max[j-1]存放上一组的最大值 int main () { int m, n, i, j, M; while (scanf("%d%d", &m, &n) != EOF) { for (i = 1; i <= n; i++) scanf("%d", &a[i]); memset(dp, 0, sizeof(dp)); memset(Max, 0, sizeof(Max)); for (i = 1; i <= m; i++) ///i代表组数,j代表元素个数 { M = -INF; ///每次多分一组都需要统计最大值 for (j = i; j <= n; j++) ///j从i开始是因为组数肯定要比元素个数少 { dp[j] = max(dp[j-1]+a[j], Max[j-1]+a[j]); ///dp[j-1]+a[j]代表a[j]独立成组,Max[j-1]+a[j]代表a[j]加在上一组 Max[j-1] = M; ///先保存最大值,后计算这一组的最大值,则下次使用Max数组时就变成了上一组的最大值了 M = max(M, dp[j]); } } printf("%d\n", M); } return 0; }
HDU 1024 Max Sum Plus Plus(二维数组转化为一维数组)
标签:
原文地址:http://www.cnblogs.com/syhandll/p/4784209.html