问题描述
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。
要求算法的时间复杂度为O(n)。
输入格式
输入有两行:
第一行是n值(1<=n<=10000);
第二行是n个整数。
输出格式
输出最大子段和。
输入样例
6
-2 11 -4 13 -5 -2
输出样例
20
#include <iostream>
using namespace std;
const int N = 10010, INF = 1e9;
int n, res;
int a[N];
int main() {
cin >> n;
for (int i = 1; i <= n; i ++ ) cin >> a[i];
res = -INF;
for (int i = 1; i <= n; i ++ )
for (int j = 1; j <= i; j ++ ) {
int sum = 0;
bool st = false;
for (int k = j; k <= i; k ++ ) {
if (a[k] > 0) st = true;
sum += a[k];
}
if (st == false) sum = 0;
res = max(res, sum);
}
cout << res << endl;
return 0;
}