贪心思想,每次合并最小的两堆就能使总消耗最少,所以考虑优先对列,不过要从大到小。
`#include<stdio.h>
include
include
using namespace std;
int main(){
int n,a;
priority_queue<int,vector
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a);
q.push(a);
}
int sum=0;
for(int i=0;i<n-1;i++){
int t=0;
sum+=q.top();
t+=q.top();
q.pop();
sum+=q.top();
t+=q.top();
q.pop();
q.push(t);
}
printf("%d",sum);
return 0;
} `