int a[10005];
int main() {
INIT
int n;
cin >> n;
for(int i = 0; i < n; i ++) {
cin >> a[i];
}
int s = 0, start = 0, end = n - 1, ans = -1;
for(int i = 0; i < n; i ++) {
s += a[i];
if(s < 0) {
s = 0;
continue;
}
if(s > ans) {
ans = s;
end = i;
}
}
s = 0;
for(int i = end; i >= 0; i --) {
s += a[i];
if(s == ans) {
start = i;
// 这里不能break,要找index最小的起点,测试点6
}
}
if(ans < 0) cout << 0 << " " << a[start] << " " << a[end];
else cout << ans << " " << a[start] << " " << a[end];
return 0;
}
start和end需要初始化,不然全是负数的序列不会对end变量进行修改导致错误。
题目要求start要最小索引,故找到最小子列后不能立即break(子列前有一串0的情况)。
输出一定要判断ans>=0再输出,有可能全是负数的情况导致ans<0。