最大子段和
最大子段和求法: 设 \(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;
}

浙公网安备 33010602011771号