贪心: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;
}
相关推荐
墨染千千秋2 分钟前
C++输入输出全解
c++
云qq5 分钟前
C++ 原子操作
开发语言·c++·算法
A charmer9 分钟前
第一章:基础语法破冰|从 C++ 无缝切换 OC 语法
c++·objective-c
xrgs_shz13 分钟前
基于轻量化浅层卷积神经网络的手写数字识别
算法·matlab·cnn
许彰午16 分钟前
02-手写链表、栈、队列——不依赖任何集合框架
数据结构·链表·面试
MegaDataFlowers17 分钟前
141.环形链表
数据结构·链表
fffzd18 分钟前
C++入门(一)
开发语言·c++·命名空间·输入输出·缺省参数
计算机安禾25 分钟前
【计算机网络】第10篇:距离矢量路由算法——Bellman-Ford方程与RIP协议的特性分析
计算机网络·算法
机器学习之心33 分钟前
基于开普勒优化算法(KOA)优化CNN-BiGRU-Attention混合网络的时间序列预测模型,MATLAB代码
算法·时间序列预测模型·开普勒优化算法
草莓熊Lotso36 分钟前
Python 入门必吃透:函数、列表与元组核心用法(附实战案例)
大数据·服务器·开发语言·c++·人工智能·python·qt