1049 最大子段和

来源:互联网 发布:橙光 闪艺 知乎 编辑:程序博客网 时间:2024/06/03 13:56

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。

Input

第1行:整数序列的长度N(2 <= N <= 50000)
第2 - N + 1行:N个整数(-10^9 <= A[i] <= 10^9)

Output

输出最大子段和。

Input示例

6
-2
11
-4
13
-5
-2

Output示例

20

注意int存不下,要用long long来储存

#include"iostream"using namespace std;typedef long long ll;const int maxn=1e5+7;ll ai[5*maxn];int main(){    int n;    cin>>n;    for(int i=0;i<n;i++)        cin>>ai[i];    ll sum=0;    ll mmax=0;    for(int i=0;i<n;i++)    {        if(sum>=0)        {            sum+=ai[i];        }        else            sum=ai[i];        if(sum>mmax)            mmax=sum;    }        cout<<mmax<<endl;    return 0;}
0 0
原创粉丝点击