最大子段和

洛谷P1115

最大子段和求法: 设 \(f_i\) 为以 \(i\) 为结尾的最大子段和,若 \(f_{i - 1}\) 为负,则 \(f_i = a_i\) ,否则 \(f_i = f_{i - 1} + a_i\) 。这显然是正确的

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, a[N], f[N], ans;
int main()
{
	scanf("%d", &n);
	for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
	ans = f[1] = a[1];
	for(int i = 2; i <= n; ++i){
		f[i] = max(a[i], f[i - 1] + a[i]);
		ans = max(ans , f[i]);
	}
	cout << ans;
	return 0;
}
posted @ 2022-04-09 10:15  Faker_yu  阅读(54)  评论(0)    收藏  举报