# 題目

AP325 Q-1-4. 支點切割

# 解題思路

目前沒東西...

# 程式碼

#include<bits/stdc++.h>
using namespace std;
#define  N 50005
typedef long long LL;
LL a[N],K,lps[N],rps[N];//ps:prefix sum
int cut(int l,int r,int k){
    if(k>K || r-l<2)
        return 0;
    LL buffer=0;
    lps[l]=0;rps[r]=0;
    for(int i=l+1;i<r;i++){
        buffer+=a[i-1];
        lps[i]=lps[i-1]+buffer;
    }
    buffer=0;
    for(int i=r-1;i>l;i--){
        buffer+=a[i+1];
        rps[i]=rps[i+1]+buffer;
    }
    buffer=10e8+1;
    int c;
    for(int i=r-1;i>l;i--){
        LL sum;
        sum=abs(lps[i]-rps[i]);
        if(sum<=buffer){
            buffer=sum;
            c=i;
        }
    }
    return a[c]+cut(l,c-1,k+1)+cut(c+1,r,k+1);
}
int main(){
    int n;
    cin>>n>>K;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    cout<<cut(0,n-1,1);
    return 0;
}
更新於 閱讀次數 次