贪心: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;
}
相关推荐
1***438019 小时前
MATLAB高效算法实战技术文章大纲工程领域的应用背景
开发语言·算法·matlab
求梦82019 小时前
【力扣hot100题】搜索二维矩阵II(16)
算法·leetcode·矩阵
艾莉丝努力练剑19 小时前
【QT】环境搭建收尾:认识Qt Creator
运维·开发语言·c++·人工智能·qt·qt creator·qt5
2501_9011478319 小时前
单词拆分(Word Break)题解 | 动态规划解法
考研·算法·动态规划
Larry_Yanan19 小时前
Qt安卓开发(二)摄像头打开
android·开发语言·数据库·c++·qt·ui
HalvmånEver19 小时前
Linux:深入剖析 System V IPC下(进程间通信九)
linux·运维·服务器·c++·system v·管道pipe
m0_7482500319 小时前
C++ 修饰符类型
开发语言·c++
李日灐19 小时前
C++STL:仿函数、模板(进阶) 详解!!:“伪装术”和模板特化、偏特化的深度玩法指南
开发语言·c++·后端·stl
翱翔的苍鹰19 小时前
使用PyTorch实现线性回归的完整流程
算法·回归·线性回归
万行19 小时前
机器人系统ros2&期末速通2
前端·人工智能·python·算法·机器学习