题目
答案
#include<iostream>
#include<queue>
using namespace std;
int main()
{
priority_queue<int,vector<int>,greater<int> > q;
int n,tmp;
cin>>n;
while(n--)
{
cin>>tmp;
q.push(tmp);
}
int sum=0;
while(q.size()!=1)
{
int tmp1=q.top();
q.pop();
int tmp2=q.top();
q.pop();
sum+=tmp1+tmp2;
q.push(tmp1+tmp2);
}
cout<<sum;
}
总结
这道题就是经典的哈夫曼树问题,按照以往的思路当然可以采用数组做,但显然不如优先级队列
优先级队列默认为降序队列,想要改为升序队列就需要这样设置
priority_queue<int,vector<int>,greater<int> > q;
如果同学们对于优先级队列还是很陌生,我推荐给大家这篇文章——c++优先队列(priority_queue)用法详解,里面有很详细的讲解