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