贪心: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;
}
相关推荐
松涛和鸣8 分钟前
DAY38 TCP Network Programming
linux·网络·数据库·网络协议·tcp/ip·算法
ss27312 分钟前
ThreadPoolExecutor七大核心参数:从源码看线程池的设计
java·数据库·算法
qq_4335545423 分钟前
C++ 状压DP(01矩阵约束问题)
c++·算法·矩阵
虫小宝24 分钟前
返利app排行榜系统设计:基于大数据计算的实时排名算法实现
大数据·算法
千里马-horse24 分钟前
CallbackInfo
c++·node.js·napi·callbackinfo
C雨后彩虹28 分钟前
字符串拼接
java·数据结构·算法·华为·面试
LYFlied30 分钟前
【每日算法】LeetCode 279. 完全平方数(动态规划)
前端·算法·leetcode·面试·动态规划
何小义的AI进阶路43 分钟前
win下 vscode下 C++和opencv的配置与使用
c++·图像处理·vscode·opencv
C雨后彩虹44 分钟前
ConcurrentHashMap入门:高并发场景的 HashMap替代方案
java·数据结构·哈希算法·集合·hashmap