题意:给出一组数,求最大连续子序列和。
连续子序列和:几个连续数的和。
思路:一个序列加正数序列和会增大,负数则会减小。所以如果我们每次都增加正数,那这个序列和将会最大。设置一个max值,记录当前情况下最大的序列和。我们把已经添加的所有序列当作一个数,向后不断遍历。遇到正数就加上,遇到负数也加上,不过要判断一下加上这个负数之后的和是否为负数。如果为负数,就舍弃,因为我们把遍历过的序列当作一个数,现在这个数已经是一个负值,对后面的数不会再有贡献,从零开始继续往后遍历。遍历过程中不断比较max值,遇到更大的更新max值,最后max即为最大子序列和。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,x[100007],sum=0,temp=0;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",x+i);
}
for(int i=0;i<n;i++){
temp+=x[i];
if(temp<0){
temp=0;
}
sum=max(sum,temp);
}
printf("%d\n",sum);
return 0;
}