贪心: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;
}
相关推荐
云深麋鹿17 小时前
C++ | 手搓一个string类
开发语言·c++·容器
刺客xs17 小时前
C++ 11新特性
java·开发语言·c++
式51617 小时前
CUDA编程学习(四)内存拷贝
学习·算法
Barkamin17 小时前
直接插入排序的简单实现
java·算法·排序算法
Frostnova丶17 小时前
LeetCode 1622. 奇妙序列
算法·leetcode
..过云雨17 小时前
【负载均衡oj项目】04. oj_server题目信息获取、界面渲染、负载均衡、后台交互功能
运维·c++·html·负载均衡·交互
..过云雨17 小时前
【负载均衡oj项目】02. comm公共文件夹设计 - 包含所有需要用到的自定义工具
数据库·c++·mysql·html·负载均衡
自在极意功。17 小时前
ArrayList扩容机制
java·开发语言·算法·集合·arraylist
知无不研17 小时前
constexpr关键字
开发语言·c++·constexpr
健康平安的活着17 小时前
java8案例对list[过滤、分组,转换,查找等]清洗逻辑
java·数据结构·list