哈夫曼编码 - 代码

https://ac.nowcoder.com/acm/problem/233601

#include <iostream>
#include <queue>
#include <vector>

using namespace std;
using ll = long long;

int n;
priority_queue<ll, vector<ll>, greater<ll>> heap;
// 字符串的最短长度 即为 哈夫曼树的 带权路径长度。 
// 也是最小的带权路径长度总和。 
int main() {
	cin >> n;
	while(n--) {
		int x; cin >> x;
		heap.push(x);
	}
	
	ll ans = 0;
	while(heap.size() > 1) {
		ll x = heap.top(); heap.pop();
		ll y = heap.top(); heap.pop();
		ans += x + y;
		heap.push(x + y);
	}
	
	cout << ans << endl;
	return 0;
}

全部评论

相关推荐

求过求过
想玩飞盘的菠萝蜜在春...:流程这么快吗兄弟
点赞 评论 收藏
分享
小憨包沈幼楚:沈幼楚是支持学习的第一动力
点赞 评论 收藏
分享
09-01 16:09
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务