题目链接:https://www.luogu.com.cn/problem/P1115
用sum记录前缀和,如果当前前缀和小于0, 那就更新当前sum 为 0。同时,每一次让sum与结果ans去一个max,这里的ans记得初始化一个很小的数。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int inf = 0x3f3f3f3f;
int n;
long long sum, res = -inf;
int t = -inf;
int main(){
cin >> n;
while (n -- ){
int a; scanf("%d", &a);
t = max(t, a);
if (sum < 0) sum = 0;
sum += a;
res = max(res, sum);
}
if (t < 0) printf("%d\n", t);
else printf("%lld\n", res);
return 0;
}