Here is 代码:
#include<bits/stdc++.h>
using namespace std;
int n,ai=1,bi=1,ans;
void Combine_the_fruits(int a[],int n){
if(n==1){
return;
}
int *b=new int[n+10],bi=1,ai=1,bt=1;
b[bi++]=a[1]+a[2];ans+=a[1]+a[2];
ai=3;
while(ai<=n){
if(ai==n){
b[bi]=a[ai]+b[bt];
ans+=a[ai]+b[bt];
bt++;bi++,ai++;
continue;
}
int minn,tmp=a[ai];
if(b[bt]<a[ai+1]){
b[bi]=b[bt]+a[ai];
ans+=b[bt]+a[ai];
bt++;
}else{
b[bi]=a[ai]+a[ai+1];
ans+=a[ai]+a[ai+1];
ai++;
}bi++,ai++;
}bi--;
int i,k;
memset(a,0,sizeof(a));
for(i=1,k=bt;k<=bi;k++){
a[i++]=b[k];
}i--;
Combine_the_fruits(a,i);
}
int main(){
scanf("%d",&n);
int *a=new int[n+10],*b=new int[n+10];
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}sort(a+1,a+n+1);
if(n==1){
printf("%d",a[1]);
return 0;
}
Combine_the_fruits(a,n);
printf("%d",ans);
return 0;
}