题目链接:[编程题]连续最大和
解题思路:
如果暴力解法,肯定不可能
那么就判断当前数字对总答案有没有贡献:
举例:
1 -2 3 3 3 1是正数,必然有贡献,-2 如果加上的话, 前面的总和就为 -1 ,对总和是没有贡献的,后面的正数肯定是有贡献
9 -3 3 3 3 9是正数,必然有贡献, -3,如果加上的话,尽管它是负数,它也是有贡献的, -3 + 9 = 6 ,对总和是有贡献的
那么就是判断前面的相加是否大于0,如果大于0,它就是有贡献的
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ans = -1e8;
int main(){
int n, k;
cin >> n;
ll total = 0;
for(int i = 0; i < n; i++) {
cin >> k;
if(total >= 0) {
total += k;
} else {
total = k;
}
ans = max(ans, total);
}
cout << ans << endl;
return 0;
}