输入格式:
输入第1行给出正整数K (≤100000);第2行给出K个整数,其间以空格分隔。
输出格式:
在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。
输入样例:
6
-2 11 -4 13 -5 -2
输出样例:
20
思路
贪心求解,因为题目说了遇到负数就是0,所以我们在输入a之后就判断一下sum + a的大小,如果是小于0,那就把sum初始化为0,否则就去和res比较,更新最大值。
即,我们在加和的时候,遇到“连续和”为负数的情况就放弃这个和,从下一个元素开始重新计算元素和
代码
#include <stdio.h>
int n;
int max(int a, int b) {
if (a > b) return a;
return b;
}
int main() {
scanf("%d", &n);
int sum = 0;
int res = 0;
int a;
for (int i = 0; i < n; i++) {
scanf("%d", &a);
if (a + sum <= 0) sum = 0;
else {
sum += a;
res = max(sum, res);
}
}
printf("%d", res);
return 0;
}