题目描述
给出一段序列,选出其中连续且非空的一段使得这段和最大。
输入输出格式
输入格式:
第一行是一个正整数 NN ,表示了序列的长度。
第二行包含 NN 个绝对值不大于 1000010000 的整数 A_iAi ,描述了这段序列。
输出格式:
一个整数,为最大的子段和是多少。子段的最小长度为 11 。
输入输出样例
输入样例#1:
7 2 -4 3 -1 2 -4 3
输出样例#1:
4
说明
【样例说明】
2,-4,3,-1,2,-4,32,−4,3,−1,2,−4,3 中,最大的子段和为4,该子段为 3,-1,23,−1,2 .
【数据规模与约定】
对于 40\%40% 的数据,有 N ≤ 2000N≤2000 。
对于 100\%100% 的数据,有 N ≤ 200000N≤200000 。
解法:扫一遍就可以了。代码很优雅。
#include <bits/stdc++.h>
#define pii pair<int, int>
#define ll long long
using namespace std;
const int maxn = 2e5 + 10;
ll a[maxn];
int main()
{
// freopen("/Users/vector/Desktop/testdata.in", "r", stdin);
int n, t, v;
cin >> n >> t;
ll ans = t, now = t;
for(int i = 1; i < n; i++)
{
cin >> v;
now = now < 0 ? 0 : now;
now += v;
ans = max(ans, now);
}
cout << ans << endl;
return 0;
}