大概思路就是二分法
#include<bits/stdc++.h>
using namespace std;
int maxsum(int* A,int x,int y){
int maxs,L,R,m,count=0;
if(y-x==1)return A[x];
m=x+(y-x)/2;
L=A[m-1];R=A[m];
maxs=max(maxsum(A,x,m),maxsum(A,m,y));
for(int i=m-1;i>=x;i--) L=max(L,count+=A[i]);
count=0;
for(int i=m;i<y;i++) R=max(R,count+=A[i]);
return max(maxs,L+R);
}
int main(){
int n,a[1000001],ans;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
ans=maxsum(a,0,n-1);
cout<<ans;
return 0;
}
为什么你一个测试点没过TT