文章

141

粉丝

68

获赞

400

访问

31.2k

头像
搬水果 题解:优先队列,哈夫曼树思路
P1371 吉林大学机试题
发布于2025年3月11日 13:30
阅读数 13

#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>,表示顺序或者逆序,如果后两个都不填,默认逆序,这样我们就可以很容易的自动的得到最小的两个数值了。

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发