题目:
题解:
注意合并以后依然需要再排序,所以使用优先队列
#include <bits/stdc++.h>
using namespace std;
long long a[1000005];
priority_queue<long long ,vector<long long >,greater<long long>> q;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%lld",&a[i]);
q.push(a[i]);
}
sort(a,a+n);
long long ans=0;
if(n==1)
{
ans=a[0];
}
else
{
while(q.size()>1)
{
long long x=q.top();
q.pop();
long long y=q.top();
q.pop();
ans=ans+x+y;
q.push(x+y);
}
}
cout<<ans<<endl;
return 0;
}