本题思路也十分简单,不停的选最小的两个。合并后压入队列。类似构造哈夫曼树。
#include <iostream>
#include <queue>
typedef long long int ll;
using namespace std;
int main()
{
int n;
cin>>n;
priority_queue<int ,vector<int>,greater<int> > t;
int x;
for(int i=1;i<=n;i++)
{
cin>>x;
t.push(x);
}
ll sum=0;
while(t.size()!=1)
{
ll x1=t.top();
t.pop();
ll x2=t.top();
t.pop();
sum+=x1+x2;
t.push(x1+x2);
}
cout<<sum<<endl;
}