P1115 最大子段和(DP)

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

【输入格式】
第一行是一个整数,表示序列的长度 n n n。
第二行有 n n n个整数,第 i i i个整数表示序列的第 i i i个数字 a i a_i ai​。

【输出格式】
输出一行一个整数表示答案。

【数据范围】
1 ≤ n ≤ 2 × 1 0 5 , − 1 0 4 ≤ a i ≤ 1 0 4 1\leq n\leq 2×10^5,-10^4\leq a_i\leq 10^4 1≤n≤2×105,−104≤ai​≤104

【输入样例】

7
2 -4 3 -1 2 -4 3

【输出样例】

4

【代码】

#include <iostream>
#include <algorithm>
using namespace std;

const int N = 200010;
int a[N], f[N];//f[i]表示以i结尾的连续区间,f[i] = max(f[i - 1] + a[i], a[i])
int n;

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> a[i];
	int res = -0x3f3f3f3f;
	for (int i = 1; i <= n; i++)
	{
		f[i] = max(f[i - 1], 0) + a[i];
		res = max(res, f[i]);
	}
	cout << res << endl;
	return 0;
}
上一篇:牛牛选物


下一篇:高级图论