为什么只有80分
查看原帖
为什么只有80分
902613
purple_blue楼主2024/5/3 17:02

//最大子段和 //分治法

#include<iostream>
#include<algorithm>
#define N 100
using namespace std;
int max(int A,int B,int C){
    return A > B?(A > C? A : C):(B > C? B : C);
}
int maxsum(int num[],int left,int right){
    //递归终止条件
    if(left == right){
        if(num[left] > 0) return num[left];
        else return 0;
    }
    int leftline = 0,maxleftline = 0,rightline = 0,maxrightline = 0;//设置分界线左右的变量
    int center = (left + right)/2;
    for(int i = center;i >= left;i--){
        leftline += num[i];
        if(maxleftline < leftline) maxleftline = leftline;
    }//向左扫描
    for(int j = center+1;j <= right;j++){
        rightline += num[j];
        if(maxrightline < rightline) maxrightline = rightline;
    }//向右扫描
    int maxleft = 0,maxright = 0;
    maxleft = maxsum(num,left,center);
    maxright = maxsum(num,center+1,right);
    return max(maxleft,maxright,maxleftline+maxrightline);
}
int main(){
    int n;
    cin >> n;
    int num[n] = {0};
    for(int i = 0;i < n;i++){
        cin >> num[i];
    }
    int result;
    result = maxsum(num, 0 , n - 1);
    cout << result;
    return 0;
}
2024/5/3 17:02
加载中...