贪心: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;
}
相关推荐
严文文-Chris6 分钟前
【半监督学习常见算法】
学习·算法·机器学习
爱学java的ptt14 分钟前
206反转链表
数据结构·链表
FPGA_无线通信15 分钟前
OFDM 同步设计(3)
算法·fpga开发
SHOJYS21 分钟前
离散化+二位前缀和的计数题 [USACO20DEC] Rectangular Pasture S
算法
java修仙传28 分钟前
力扣hot100:最大子数组和
数据结构·算法·leetcode
hweiyu0031 分钟前
数据结构:二叉树
数据结构
white-persist34 分钟前
【攻防世界】reverse | Mysterious 详细题解 WP
c语言·开发语言·网络·汇编·c++·python·安全
赖small强35 分钟前
【Linux C/C++ 开发】 GCC 编译过程深度解析指南
linux·c语言·c++·预处理·链接·编译·编译过程
BestOrNothing_201535 分钟前
C++ 并发四件套:并发编程 / 原子性 / 数据竞争 / 内存模型 (全解析)
c++·多线程·并发编程·线程安全·内存模型·原子操作·数据竞争
想唱rap39 分钟前
C++之unordered_set和unordered_map
c++·算法·哈希算法