哈夫曼编码 - 代码
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;
}
查看8道真题和解析
