嗯,蒟蒻,思路是不断找一个数抹平wsum与sum的差,即delta变小,全wa
查看原帖
嗯,蒟蒻,思路是不断找一个数抹平wsum与sum的差,即delta变小,全wa
1460508
tank737楼主2024/10/9 16:30
#include <iostream>
#include <algorithm>
using namespace std;
int study(int *work,int end,int wsum){
    int sum=0;
    int p=0;
    do{
        p=0;
        int delta=abs(wsum-sum);
        for(int i=1;i<=end;i++){
            if(abs(sum+work[i]-wsum+work[i])<delta){
                p=i;
                delta=abs(sum+work[i]-wsum+work[i]);
            }
        }
        sum+=work[p];
        wsum-=work[p];
        work[p]=0;
    }while(p!=0);
    return max(sum,wsum);
}
int main(){
    int s1,s2,s3,s4,Sum=0,sumt=0;
    int A[21]={0},B[21]={0},C[21]={0},D[21]={0};
    cin>>s1>>s2>>s3>>s4;
    for(int i=1;i<=s1;i++){
        cin>>A[i];
        sumt+=A[i];
    }
    Sum+=study(A,s1,sumt);
    sumt=0;
    for(int i=1;i<=s2;i++){
        cin>>B[i];
        sumt+=B[i];
    }
    Sum+=study(B,s2,sumt);
    sumt=0;
    for(int i=1;i<=s3;i++){
        cin>>C[i];
        sumt+=C[i];
    }
    Sum+=study(C,s3,sumt);
    sumt=0;
    for(int i=1;i<=s4;i++){
        cin>>D[i];
        sumt+=D[i];
    } 
    Sum+=study(D,s4,sumt);
    std::cout<<Sum<<endl;
    return 0;
}
2024/10/9 16:30
加载中...