思路:哈夫曼树,用优先队列,简单
#include<iostream>
#include<queue>
#include<stdio.h>
using namespace std;
int main()
{
priority_queue<__int64,vector<__int64>,greater<__int64> > q;//从小到大 的优先队列
int n;
scanf("%d",&n);
int l;
while(n--)
{
scanf("%d",&l);
q.push(l);//添加优先队列中
}
__int64 sum=0;
while(q.size()>1)//终止条件为 最后合为 一块 木头
{
__int64 l1,l2;
l1=q.top(); q.pop();
l2=q.top(); q.pop();
l=l1+l2;
sum+=l;
q.push(l);//把 长度 l 加到 队列中
}
printf("%I64d\n",sum);
return 0;
}