51nod 1049 最大子段和

来源:互联网 发布:人力资源管理 知乎 编辑:程序博客网 时间:2024/06/06 14:04
N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值。当所给的整数均为负数时和为0。

例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。



这个很简单了,我们就是枚举一直加,如果当前sum<0了,我们就归0重新继续加。在期间寻找最大值即可。

#include<iostream>
#include<stdio.h>
using namespace std;
 long long  t;
int main()
{
      long long n,sum,maxx;
    while(scanf("%lld",&n)!=EOF)
    {
        sum=0;
        maxx=-1;
       for(int i=1;i<=n;i++)
       {
           cin>>t;
           if(sum+t<0)
           {
               sum=0;
           }
           else
           {
               sum=sum+t;
               maxx=max(maxx,sum);
           }
       }
       cout<<maxx<<endl;
    }
}