每次合并最轻的两堆
Code
#include <bits/stdc++.h>
using namespace std;
const int N = 10010;
typedef long long ll;
priority_queue<int,vector<int>,greater<int> >q;
int a[N];
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
q.push(x);
}
ll res=0;
while(q.size()>=2){
auto t1=q.top(); q.pop();
auto t2=q.top(); q.pop();
res+=t1+t2;
q.push(t1+t2);
}
cout<<res<<endl;
return 0;
}
京公网安备 11010502036488号