蓝桥杯 试题 基础练习 Huffuman树

时间:2022-07-24
本文章向大家介绍蓝桥杯 试题 基础练习 Huffuman树,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

思路: 很明显我们要满足的是要求每次得到的数组从小到大排列,然后每次取出前两个最小的,然后我们将其相加再次加入数组,直到只剩一个数字为止!

那么我们很容易想到STL容器中set,但是可能有重复数字,set会自动去重,怎么办?这个时候我们就要用到multiset了,其与set操作差不多,但是能保留重复数字!

不懂可以看大佬博客 AC代码如下

#include<bits/stdc++.h>

using namespace std;

multiset<int> mp;//允许有重复数字并且从小到大排列 
int main(){
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		int res;
		cin>>res;
		mp.insert(res);
	}
	int ans = 0;//计算总数
	int flag;
	for(int i=1;i<=n-1;i++){//得到一个数需要执行n-1次操作 
	   flag = 0;
	   flag = *mp.begin();//加第一个数 
	   mp.erase(mp.begin());//删除 
	   flag += *mp.begin(); //加第二个数
	   mp.erase(mp.begin());//删除
	   mp.insert(flag);
	   ans += flag; 
	} 
	cout<<ans<<endl;
	return 0;
}