思路:哈夫曼树,用优先队列,简单
#include#include #include 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;}