#include <iostream>
#include <algorithm>
using namespace std;
int finally = 0;
int first = 0;
int Maxnum(int *a, int n) {
int begin = 0;//记录可行顺序的起始位置
int sum = 0; //当前最大连续字段和
int index = 0; //保存决策第 i 个数时,前面字段和的状态
for (int i = 0; i < n; i++) {
if (index <= 0) {
begin = i;
index = a[i];
} else {
index += a[i];
}
if (index > sum) {
sum = index;
finally = i;
first = begin;
}
}
return sum;
}
int main() {
int num;
while (cin >> num, num != 0) {
int a[10004];
first = 0;
finally = 0;
for (int i = 0; i < num; i++) {
cin >> a[i];
}
int max = *max_element(a, a + num - 1);
if (max < 0) {
cout << "0" << " " << a[0] << " " << a[num - 1] << endl;
} else {
int index = Maxnum(a, num);
if (index ==0) {
cout << "0" << " " << "0" << " " << "0" << endl;
} else {
cout << index << " " << a[first] << " " << a[finally] << endl;
}
}
}
return 0;
}
最大连续子序列__动态规划
最新推荐文章于 2020-11-27 02:26:45 发布