洛谷-P1115 最大子段和

洛谷-P1115 最大子段和

原题链接:https://www.luogu.com.cn/problem/P1115


题目描述

给出一个长度为 n 的序列 a,选出其中连续且非空的一段使得这段和最大。

输入格式

第一行是一个整数,表示序列的长度 n。

第二行有 n 个整数,第 iii 个整数表示序列的第 i 个数字 \(a_i\)

输出格式

输出一行一个整数表示答案。

输入输出样例

输入 #1

7
2 -4 3 -1 2 -4 3

输出 #1

4

说明/提示

样例 1 解释

选取 [3, 5] 子段 {3, -1, 2},其和为 4。

数据规模与约定

  • 对于 40% 的数据,保证 \(n \leq 2 \times 10^3\)
  • 对于 100% 的数据,保证 \(1 \leq n \leq 2 \times 10^5\)\(-10^4 \leq a_i \leq 10^4\)

C++代码

#include <iostream>
using namespace std;

int main() {
    int n,i,ans=0,b=0;
    cin>>n;
    int a[n];
    for(i=0;i<n;++i)
        cin>>a[i];
    for(i=0;i<n;++i) {
        b+=a[i];
        if(b>ans)
            ans=b;
        else if(b<0)
            b=0;
    }
    if(ans==0) {
        ans=a[0];
        for(i=1;i<n;++i)
            if(a[i]>ans)
                ans=a[i];
    }
    cout<<ans<<endl;
    return 0;
}
posted @ 2020-07-01 10:32  yuzec  阅读(154)  评论(0编辑  收藏  举报