题目链接: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;
}