给定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
#includeusing 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; }



