·文章长度:不需要记录每一个叶子节点的高度,即不需要通过height1*wieght1+....这种方式来求
·可以通过不断相加,eg 1+2+3+3+4+6即1+2+(1+2)+3+4+(1+2+3)
·使用优先队列来实现:priority_queue<int, vector<int>,greator<int> >
其中greator<int>是从小到大;less<int> 是从大到小
#include<iostream>
using namespace std;
#include<queue>
int main(void)
{
int n;
while(~scanf("%d",&n))
{
priority_queue<int,vector<int>,greater<int> > pq;
int temp;
int total=0;
for(int i=0;i<n;i++)
{
scanf("%d",&temp);
pq.push(temp);
}
if(pq.size()==1)
{
total=temp;
}
while(pq.size()!=1)
{
int temp1=pq.top();
pq.pop();
int temp2=pq.top();
pq.pop();
total+=temp1+temp2;
pq.push(temp1+temp2);
}
printf("%d\n",total);
}
return 0;
}