文章
141
粉丝
68
获赞
400
访问
31.2k
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
while(cin>>n){
priority_queue<int,vector<int>,greater<int>>q;
while(n--){
int x;cin>>x;
q.push(x);
}
int ans=0;
while(q.size()!=1){
int k=0;
k+=q.top();
q.pop();
k+=q.top();
q.pop();
ans+=k;
q.push(k);
}
cout<<ans<<endl;
}
}
我们知道,哈夫曼树可以生成最小权和的结果,那么我们如何方便的实现整个逻辑呢,我们可以使用优先队列,也就是priority_queue,里面徐亚三个参数,int,vector<int>,greater<int>,最后一个也可以修改为less<int>,表示顺序或者逆序,如果后两个都不填,默认逆序,这样我们就可以很容易的自动的得到最小的两个数值了。
登录后发布评论
暂无评论,来抢沙发