#include <bits/stdc++.h> #define int long long //(有超时风险) #define PII pair<int,int> #define endl '\n' #define all(x) x.begin(), x.end() using namespace std; const int N=2e6+10,M=1e3+10,mod=998244353,INF=0x3f3f3f3f; int a[N],b[N],pre[N]; int g[M][M]; signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n;cin>>n; vector<int>a(n+10),l(n+10),r(n+10); for(int i=1;i<=n;i++)cin>>a[i]; //l[1]=a[1];r[n]=a[n]; //边界初始化; l[0]=-8e18;r[n+1]=-8e18; // f[i]表示以i结尾的最大连续字段和; for(int i=1;i<=n;i++)l[i]=max(l[i-1]+a[i],a[i]); for(int i=n;i>=1;i--)r[i]=max(r[i+1]+a[i],a[i]); //中间间隔多个数,所以我们还需要处理一下,求一下前缀和; //l[0]=-1e18;r[n+1]=-1e18; //处理前缀,f[i]表示前i个数的最大字段和; for(int i=1;i<=n;i++)l[i]=max(l[i],l[i-1]); for(int i=n;i>=1;i--)r[i]=max(r[i+1],r[i]); //因为边届就是这样; int mx=-1e18; for(int i=2;i<=n;i++)mx=max(mx,l[i-1]+r[i+1]); cout<<mx<<endl; return 0; }
P2642 双子序列最大和
最新推荐文章于 2024-10-12 10:08:32 发布