思路:每次去除最小的两个数进行合并,并加入集合(Huffman数)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 10007;
priority_queue<LL,vector<LL>,greater<LL>> heap;
int n;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
LL a;
scanf("%lld",&a);
heap.push(a);
}
LL res=0,ans=0;
while(heap.size()!=1)
{
LL a=heap.top();
heap.pop();
LL b=heap.top();
heap.pop();
res=a+b;
ans+=res;
heap.push(res);
}
printf("%lld",ans);
return 0;
}