贪心: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;
}
相关推荐
superman超哥3 分钟前
仓颉内存管理深度探索:引用计数的实现原理与实战
c语言·开发语言·c++·python·仓颉
芥子沫3 分钟前
《人工智能基础》[算法篇5]:SVM算法解析
人工智能·算法·机器学习·支持向量机·svm
BigerBang6 分钟前
LoRA 全方位指南:从底层原理到 Qwen-Image-Edit 实战
人工智能·pytorch·深度学习·算法
passxgx9 分钟前
11.3 迭代法和预条件子
线性代数·算法·矩阵
TechPioneer_lp13 分钟前
27届暑期实习内推:网易美团京东快手等
数据结构·c++·人工智能·笔记·机器学习·面试
X在敲AI代码16 分钟前
【无标题】
算法·leetcode·职场和发展
bubiyoushang88818 分钟前
NSGA-II 带精英策略的双目标遗传算法
算法
qq_4308558819 分钟前
线代第二章矩阵第八节逆矩阵、解矩阵方程
线性代数·算法·矩阵
小无名呀28 分钟前
RAII 智能指针
c++
月明长歌30 分钟前
【码道初阶】Leetcode136:只出现一次的数字:异或一把梭 vs HashMap 计数(两种解法完整复盘)
java·数据结构·算法·leetcode·哈希算法