基本思想:
无;
关键点:
无;
#include<iostream> #include<vector> #include<algorithm> using namespace std; const int maxn = 10100; int n; int d[maxn]; int dp[maxn]; int pre[maxn]; int main() { while (cin >> n) { if (n == 0) break; bool flag = true; for (int i = 0; i < n; i++) { cin >> d[i]; if (d[i] >= 0) flag = false; } if (flag) { printf("%d %d %d\n", 0, d[0], d[n - 1]); continue; } dp[0] = d[0]; for (int i = 0; i < n; i++) { pre[i] = i; } for (int i = 1; i < n; i++) { if (d[i] + dp[i - 1] > d[i]) { dp[i] = dp[i - 1] + d[i]; pre[i] = pre[i-1]; } else { dp[i] = d[i]; } } int index = 0; for (int i = 1; i < n; i++) { if (dp[i] > dp[index]) { index = i; } } printf("%d %d %d\n", dp[index], d[pre[index]], d[index]); } }
浙江大学机试 最大连续子序列 Easy *DP问题,PAT原题
原文:https://www.cnblogs.com/songlinxuan/p/12614954.html