poj 2479 Maximum sum(简单dp,最大连续和拓展)

来源:互联网 发布:单片机协议栈开发 编辑:程序博客网 时间:2024/06/05 16:40

题意:
在一个整数序列中,找出不相互覆盖的两段,且非空。
使得这两段里面所有数的和最大。
思路:
假设下标从1开始。
L是从1到i最大的连续和,R是从n到i最大的连续和。
ans=max{L[i]+R[i+1],1<=i<n}

    scanf("%d", &t);    while (t--) {        scanf("%d", &n);        rep(i, 1, n) scanf("%d", a+i);        dp[0][1] = a[1];        rep(i, 2, n) dp[0][i] = max (a[i], dp[0][i-1] + a[i]);        dp[1][n] = a[n];        urep(i, n-1, 1) dp[1][i] = max (a[i], dp[1][i+1] + a[i]);        L[1] = a[1];rep(i, 2, n) L[i] = max (L[i-1], dp[0][i]);        R[n] = a[n];urep(i, n-1, 1) R[i] = max (R[i+1], dp[1][i]);        int ans = -inf;        rep(i, 1, n-1) ans = max (ans, L[i]+R[i+1]);        printf("%d\n", ans);    }
0 0
原创粉丝点击