WA on #1 80求调
查看原帖
WA on #1 80求调
197600
张伟大律师楼主2024/10/14 09:13

大概思路就是二分法

#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

2024/10/14 09:13
加载中...