This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
const int INF = 0x3f3f3f3f;
int n, a[N], f[N], res = -INF;
// 定义f[i]为从1开始,到i结束的所有数字中的最大子段和
// 从边界开始考虑,如果f[1]=a[1];
// f[2] =max(a[2],a[2]+f[1])
// 推广通用公式: f[i]=max(f[i-1]+a[i],a[i])
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i]; //输入
f[i] = max(f[i - 1] + a[i], a[i]); // DP
res = max(res, f[i]); //取最大值也同时进行,节约时间
}
cout << res << endl;
return 0;