贪心:Huffman树

合并果子:

该题与石子合并的区别:石子合并是两两相邻才能合并,这题是任意两点合并

该题的思路:每次合并最小的两个点

cpp 复制代码
#include <iostream>
#include <algorithm>
#include <queue>

using namespace std;

int main()
{
    int n;
    scanf("%d", &n);

    priority_queue<int, vector<int>, greater<int>> heap;//小根堆,所以堆头是最小值
    while (n -- )
    {
        int x;
        scanf("%d", &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);
    }

    printf("%d\n", res);
    return 0;
}
相关推荐
风之歌曲11 小时前
c++高精度模板
c++·算法·矩阵
crescent_悦11 小时前
C++:Find Coins
c++
SWAGGY..11 小时前
数据结构学习篇(10)--- 二叉树基础oj练习
数据结构·学习
千谦阙听11 小时前
双链表:比单链表更高效的增删查改
数据结构·链表·visual studio
嵌入式进阶行者11 小时前
【算法】深度优先搜索实例:华为OD机考双机位A卷- 中庸行者
c++·算法·华为od·深度优先
a35354138211 小时前
参数化曲线弧长公式推导
算法
xie_pin_an11 小时前
从二叉搜索树到哈希表:四种常用数据结构的原理与实现
java·数据结构
不知名XL11 小时前
day27 贪心算法 part05
算法·贪心算法
Tisfy12 小时前
LeetCode 3047.求交集区域内的最大正方形面积:2层循环暴力枚举
算法·leetcode·题解·模拟·枚举·几何
云深麋鹿12 小时前
C++入门篇
c++