贪心: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 分钟前
c++模板进阶知识讲解(对模板的进一步的运用与理解)
java·前端·c++·特化·模板进阶·偏特化
qingyulee14 分钟前
线性回归、决策树
人工智能·算法·线性回归
Zhang~Ling22 分钟前
C++ 继承机制详解下:多继承、虚继承与菱形继承底层原理
开发语言·c++·算法
西安邮电大学23 分钟前
2026华为OD机考真题附答案-计算数列位置N的值
java·算法
思麟呀24 分钟前
C++工业级日志项目(四)日志落地
linux·开发语言·c++·windows
哼?~25 分钟前
C++11 并发支持库中 atomic
c++
AI算法沐枫32 分钟前
机器学习经典小项目4:泰坦尼克号生存预测
人工智能·python·深度学习·线性代数·算法·机器学习·回归
玖釉-38 分钟前
单词搜索:二维网格中的 DFS 回溯与剪枝优化
c++·windows·算法·深度优先·剪枝
吴可可12340 分钟前
C++与C#版Teigha样条离散化差异解析
c++·算法·c#
搬砖的小码农_Sky41 分钟前
macOS Sequoia上如何安装gcc/g++环境?
c语言·c++·macos