思路:最大连续部分和=最大前缀和 - 前面的最小前缀和
#include <iostream>
using namespace std;
const int N = 2e5 + 10;
int a[N], b[N];
int minn = 0, maxx = -2e9;
int n;
int main()
{
cin >> n;
for(int i = 1; i <= n; i ++ ) cin >> a[i];
for(int i = 1; i <= n; i ++ ) a[i] += a[i - 1]; //求出所有的前缀和
for(int i = 1; i <= n; i ++ )
{
b[i] = a[i] - minn; //先记录一下减去最小前缀和之后的某个区间和
minn = min(minn, a[i]); //找到最小的前缀和
}
for(int i = 1; i <= n; i ++ )
maxx = max(maxx, b[i]);
cout << maxx << endl;
return 0;
}
上题的二维形式
P1719 最大加权矩形
待写~