经典哈夫曼树的模型,每次合并重量最小的两堆果子即可。
const int N=10010;
int a[N];
int n;
int main()
{
cin>>n;
priority_queue<int,vector<int>,greater<int> > heap;
for(int i=1;i<=n;i++) cin>>a[i],heap.push(a[i]);
int res=0;
while(heap.size()>1)
{
int a=heap.top();
heap.pop();
int b=heap.top();
heap.pop();
heap.push(a+b);
res+=a+b;
}
cout<<res<<endl;
//system("pause");
}