1007 Maximum Subsequence Sum (25point(s)) 需要二刷 *动态规划最大连续序列和,极其重要

Posted songlinxuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1007 Maximum Subsequence Sum (25point(s)) 需要二刷 *动态规划最大连续序列和,极其重要相关的知识,希望对你有一定的参考价值。

基本思想关键点详见 “数据结构典型问题”

 

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<vector> 
#include<string>
#include<math.h>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<set>
#include<stack>
using namespace std;

int n;
vector<int>num;
vector<int>dp;
vector<int>root;
int main() {
    cin >> n;
    int st, ed;
    bool flag = true;
    //num.resize(n);
    dp.resize(n);
    root.resize(n);
    int a;
    for (int i = 0; i < n; i++) {
        cin >> a;
        num.push_back(a);
        if (a >= 0)
            flag = false;
    }
    if (flag) {
        printf("%d %d %d
", 0, num[0], num[num.size() - 1]);
        return 0;
    }
    dp[0] = num[0];
    for (int i = 1; i < n; i++) {
        if (dp[i - 1] + num[i] <= num[i]) {
            //如果加上num[i]反而变小了;
            dp[i] = num[i];
            root[i] = i;//从新开始开路径
        }
        else {
            //如果加上变大了
            dp[i] = num[i] + dp[i - 1];
            root[i] = root[i - 1];
        }
    }
    int k = 0;
    for (int i = 1; i < n; i++) {
        if (dp[i] > dp[k])
            k = i;
    }
    printf("%d %d %d
", dp[k], num[root[k]], num[k]);
    return 0;
}

 

以上是关于1007 Maximum Subsequence Sum (25point(s)) 需要二刷 *动态规划最大连续序列和,极其重要的主要内容,如果未能解决你的问题,请参考以下文章

1007 Maximum Subsequence Sum(25 分)

1007 Maximum Subsequence Sum

1007. Maximum Subsequence Sum (25)

1007. Maximum Subsequence Sum (25)

1007. Maximum Subsequence Sum (25) 动态规划

1007 Maximum Subsequence Sum (25)(25 分)