贪心: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;
}
相关推荐
hi_ro_a11 分钟前
基于正倒排索引的boost搜索引擎
linux·c++·搜索引擎·项目
SendTomo15 分钟前
.ico透明图标在线生成下载平台深度解析
大数据·数据结构·数据库·数据仓库·个人开发
有Li17 分钟前
【AI答疑】MR数据预处理步骤
人工智能·笔记·算法·语言模型·医学生
神仙别闹22 分钟前
基于 C++ MFC 实现的个人通讯录管理系统
c++
GG-_-Bond28 分钟前
9.1kv存储持久化模拟面试
linux·c语言·数据结构·c++
盛世宏博北京41 分钟前
多传感器数据融合算法:实现档案库房温湿度全域无死角监测
算法·档案温湿度
程序员阿鹏1 小时前
双亲委派机制
java·jvm·数据结构·后端
runningshark1 小时前
数据结构-第二章-线性表及其顺序存储
数据结构
郝学胜-神的一滴1 小时前
C++20模板元编程 04:变量模板 别名模板与模板Lambda实战
服务器·开发语言·数据结构·c++·程序人生
AgentMaster1 小时前
零售行业智能客服系统怎么选?3 大场景落地与 4 款平台对比实践
大数据·人工智能·算法