贪心: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;
}
相关推荐
lzh200409197 分钟前
手撕线程池:巩固Linux线程知识
linux·c++
Godspeed Zhao11 分钟前
从零开始学AI14——最大似然估计与对数损失函数
算法·逻辑回归·最大似然
basketball61613 分钟前
C++ 命名空间知识点总结:从入门到合理设计
开发语言·c++
流年如夢16 分钟前
排序算法详解
数据结构·算法·排序算法
会编程的土豆18 分钟前
Go 语言中的 `new` 关键字(创建指针)
java·算法·golang
南宫萧幕29 分钟前
HEV能量管理建模实战:从零搭建 Simulink 物理环境到 Python(DQN) 强化学习联合仿真调通
开发语言·python·算法·matlab·汽车·控制
x_yeyue37 分钟前
2026第十七届蓝桥杯c++B组省赛题解
笔记·算法·蓝桥杯·acm·题解
handler0141 分钟前
【C++ 算法竞赛基础】数论篇:核心公式、经典例题与高频模板
开发语言·c++·算法·蓝桥杯·数论·最大公约数·最小公倍数
fpcc42 分钟前
并行编程实战——CUDA编程的打印输出
c++·cuda
程序leo源1 小时前
Qt信号与槽深度详解
c语言·开发语言·数据库·c++·qt·c#