合并果子(哈夫曼树)NOIP2004提高组

在一个果园里,达达已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。

达达决定把所有的果子合成一堆。

每一次合并,达达可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。

可以看出,所有的果子经过 n−1 次合并之后,就只剩下一堆了。

达达在合并果子时总共消耗的体力等于每次合并所耗体力之和。

因为还要花大力气把这些果子搬回家,所以达达在合并果子时要尽可能地节省体力。

假定每个果子重量都为 1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使达达耗费的体力最少,并输出这个最小的体力耗费值。

例如有 3 种果子,数目依次为 1,2,9。

可以先将 1、2堆合并,新堆数目为 3,耗费体力为 3。

接着,将新堆与原先的第三堆合并,又得到新的堆,数目为 12,耗费体力为 12。

所以达达总共耗费体力=3+12=15。

可以证明 15 为最小的体力耗费值。

输入格式

输入包括两行,第一行是一个整数 n,表示果子的种类数。

第二行包含 n 个整数,用空格分隔,第 i 个整数 ai 是第 i 种果子的数目。

输出格式

输出包括一行,这一行只包含一个整数,也就是最小的体力耗费值。

输入数据保证这个值小于 2^31。

数据范围

1≤n≤10000,
1≤ai≤20000

输入样例:
3 
1 2 9 
输出样例:
15

 思路:看完题目就知道其实是哈夫曼树的合并过程,而哈夫曼树可以用大根堆来表示,那合并的这个过程用小根堆来模拟,每次取小根堆的top(),进行合并,合并完之后在push()。
这里用小根堆的原因就是因为小根堆的特性就是把最小值放最顶部,而如果用数组去模拟,每次合并之后需要重新sort一遍。
小根堆不需要自己手写,用优先队列priority_queue作为大根堆,因为题目中所有数值全是严格大于0,所以将所有数值取反,最后将结果取反,其效果是一样的

完整代码:

 

#include <iostream>
#include <queue>
using namespace std;
const int N=10010;
int n;
typedef long long ll;
priority_queue<int> q;int main(){cin>>n;int res,temp=0;for(int i=0;i<n;i++){cin>>res;q.push(-res);}res=0;while(q.size()>=2){temp=q.top();q.pop();temp=temp+q.top();q.pop();q.push(temp);res+=temp;}cout<<-res;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/494336.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

壹基金瑞金儿童服务站:平安小课堂开课了!

为进一步加强儿童安全文化建设&#xff0c;提升学生安全意识、风险意识和自我防护能力&#xff0c;2月2日&#xff0c;壹基金瑞金儿童服务站&#xff08;瑞金赋能公益&#xff09;引入壹基金儿童安全计划资源&#xff0c;对社区儿童开展儿童安全教育。 与其永远为孩子遮风挡雨&…

ChatGPT学习第三周

&#x1f4d6; 学习目标 ChatGPT在各行各业的应用 探索ChatGPT在不同领域&#xff08;如教育、客户服务等&#xff09;的实际应用案例。 ChatGPT的局限性和挑战 讨论ChatGPT面临的挑战&#xff0c;包括偏见、误解及其限制。 ✍️ 学习活动 学习资料 《人工智能通用大模型(…

【mysql】 1819 - Your password does not satisfy the current policy requirements

创建mysql账户密码时候提示&#xff1a; 1819 - Your password does not satisfy the current policy requirements 1819-您的密码不符合当前策略要求 下面是执行的sql DROP DATABASE IF EXISTS company;CREATE DATABASE company CHARACTER SET utf8mb4 ;grant all on com…

2004-2020年全国及各省森林覆盖率、森林面积等数据

数据名称:中国及各省森林资源指标面板数据 数据来源:中国环境统计年鉴(2004-2020年) 森林覆盖率是指森林面积占土地总面积的比率,是反映一个国家(或地区)森林资源和林地占有的实际水平的重要指标,一般使用百分比表示。 林业用地面积是指生长乔木、竹类、灌木、沿海红…

Linux Seccomp 简介

文章目录 一、简介二、架构三、Original/Strict Mode四、Seccomp-bpf五、seccomp系统调用六、Linux Capabilities and Seccomp6.1 Linux Capabilities6.2 Linux Seccomp 参考资料 一、简介 Seccomp&#xff08;secure computing&#xff09;是Linux内核中的一项计算机安全功能…

VIO第6讲:投影模型与三角化

VIO第6讲&#xff1a;投影模型与三角化 文章目录 VIO第6讲&#xff1a;投影模型与三角化3 三角化3.1 坐标变换与投影模型① 世界系->相机系 X w Y w Z w > > X c Y c Z c X_wY_wZ_w>>X_cY_cZ_c Xw​Yw​Zw​>>Xc​Yc​Zc​② 相机->图像 X c Y c Z c &…

大语言模型推理加速技术:模型压缩篇

原文&#xff1a;大语言模型推理加速技术&#xff1a;模型压缩篇 - 知乎 目录 简介 量化(Quantization) LLM.int8() GPTQ SmoothQuant AWQ 精简Attention 共享Attention参数 Multi-Query Attention Grouped-Query Attention 稀疏Attention Sliding Window Attenti…

Maple Trees Package

此软件包包含8棵完全可编辑的枫树&#xff0c;可立即使用&#xff1a;碰撞已经设置好&#xff0c;在任何树层的每个级别上仔细调整弯曲&#xff0c;纹理将与设置一起导入&#xff0c;为您提供最佳外观。 探索树木&#xff01; 规格 高度&#xff1a;6-20米 特里斯&#xff1a;当…

html中的meta 元信息

html中的meta 元信息 1. 配置字符编码 <meta charset"utf-8">2. 针对 IE 浏览器的兼容性配置。 <meta http-equiv"X-UA-Compatible" content"IEedge">3. 针对移动端的配置 <meta name"viewport" content"widt…

【论文阅读】Vison-Language Navigation 视觉语言导航(1)

ACL 2022 VLN视觉和语言导航&#xff1a;任务、方法和未来方向综述 多模态任务新蓝海&#xff1a;视觉语言导航最新进展 Leader board in VLN RXR&#xff1a; Room-across-Room (RxR) is a large-scale, multilingual dataset for Vision-and-Language Navigation (VLN) in…

SpringBoot快速入门(黑马学习笔记)

需求 需求&#xff1a;基于SpringBoot的方式开发一个Web应用&#xff0c;浏览器发起请求/hello后&#xff0c;给浏览器返回字符串"Hello World~"。 开发步骤 第一步&#xff1a;创建SpringBoot工程项目 第二步&#xff1a;定义HelloController类&#xff0c;添加方…

华为手动ipv6-to-ipv4隧道

中间r2的两个接口配置两个地址就行了&#xff0c;其它什么都不用配置 两边出接口R1和R3手动隧道建立&#xff1a;先把IPV4打通&#xff0c;并配置默认路由 再起隧道接口上进行配置&#xff0c;再配置带隧道的默认路由 PC上和上联接口网关只有IPV6地址 最终两个PC可以ping通 …