AcWing 148. 合并果子
题面:
把所有的果子合成一堆:每一次合并,可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。
达达在合并果子时总共消耗的体力等于每次合并所耗体力之和。
假定每个果子重量都为,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使达达耗费的体力最少,并输出这个最小的体力耗费值。
原题链接:148. 合并果子 - AcWing
哈夫曼树带权路径长度(WPL)
结点的带权路径长度:树的根结点到该结点的路径长度和该结点权重的乘积;
树的带权路径长度:一棵树中的所有叶子结点的带权路径长度之和。
小根堆与优先队列
使用小根堆维护所有果子,每次弹出堆顶最少的两堆果子,并将其合并,合并之后将两堆重量之和再次插入小根堆中。每次操作会将果子的堆数减
,一共操作 次即可将所有果子合并成 堆。——y总
priority_queue <int, vector<int>, greater<int>>
- 存储的元素类型为
int
- 使用
vector<int>
作为底层容器类型 greater<int>
作为函数对象,指定元素之间的比较方式
#include <bits/stdc++.h> using namespace std; const int N = 1005; int main() { int n; cin >> n; priority_queue<int, vector<int>, greater<int>> heap; while (n--) { int x; cin >> x; heap.push(x); } int wpl = 0; while (heap.size() > 1) { int t1 = heap.top(); heap.pop(); int t2 = heap.top(); heap.pop(); heap.push(t1 + t2); wpl += t1 + t2; } cout << wpl; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!