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 (25)
1007. Maximum Subsequence Sum (25)