这道题思路是用容器模拟哈夫曼树的构建。
把容器中最小的两个元素拿出并加和再进入容器,累计加和的值(即权值),循环直到容器中只有一个元素结束。
上代码:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool cmp(int x,int y)
{
return x>y;
}
int main()
{
int weigth=0;
int sum;
int n;
while(cin>>n)
{
int nub;
weigth=0;
vector<int> tree;
for(int i=0;i<n;i++)
{
cin>>nub;
tree.push_back(nub);
}
while(tree.size()!=1)
{
sum=0;
sort(tree.begin(),tree.end(),cmp);
weigth+=tree.back();
sum+=tree.back() ;
tree.pop_back();
weigth+=tree.back();
sum+=tree.back() ;
tree.pop_back();
tree.push_back(sum);
}
cout<<weigth<<endl;
}
return 0;
}