浙江大学机试 最大连续子序列 Easy *DP问题,PAT原题
基本思想:
无;
关键点:
无;
#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]);
}
}

浙公网安备 33010602011771号