算法学习笔记(52)——Huffman树

Huffman树

题目链接:AcWing 148. 合并果子

利用贪心的思想,每次从当前所有堆中,挑出最小的两堆合并即可。

#include <iostream>
#include <algorithm>
#include <queue>

using namespace std;

int main()
{
    int n;
    cin >> n;
    
    // 利用小根堆动态维护最小值
    priority_queue<int, vector<int>, greater<int>> heap;
    while (n -- ) {
        int x;
        cin >> x;
        heap.push(x);
    }
    
    int res = 0;
    while (heap.size() > 1) {
        int a = heap.top(); heap.pop();
        int b = heap.top(); heap.pop();
        res += a + b;
        heap.push(a + b);
    }
    
    cout << res << endl;
    
    return 0;
}
posted @ 2023-01-11 18:07  S!no  阅读(24)  评论(0)    收藏  举报