贪心: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;
}
相关推荐
炘爚9 分钟前
单链表如何逆置
数据结构
啊我不会诶14 分钟前
最小生成树
c++·笔记·学习·算法
淀粉肠kk16 分钟前
【C++】C++11 Lambda表达式
开发语言·c++
南境十里·墨染春水17 分钟前
CMake核心用法(贴合C++编译场景)
开发语言·c++
liuyao_xianhui28 分钟前
优选算法_栈_删除字符中的所有相邻重复项_C++
开发语言·数据结构·c++·python·算法·leetcode·链表
WolfGang00732139 分钟前
代码随想录算法训练营 Day22 | 回溯算法 part04
数据结构·算法
tankeven40 分钟前
HJ154 kotori和素因子
c++·算法
!停41 分钟前
C++入门基础—类和对象3
java·数据库·c++
Shirley~~44 分钟前
力扣hot100:相交链表
前端·算法
会编程的土豆1 小时前
【leetcode hot 100】二叉树
算法·leetcode