洛谷-P1090-合并果子

博客介绍了如何利用优先队列解决洛谷P1090题目的合并果子问题,通过示例解释了最小体力耗费值的计算,并详细阐述了优先队列的声明、操作及在该问题中的应用,提供了完整的C++代码实现。
摘要由CSDN通过智能技术生成

合并果子

https://www.luogu.com.cn/problem/P1090

题目

本题欲将所有堆果子合并为一堆。每个果子重量都为 1,每合并一次消耗的体力等于两堆果子的重量之和。已知堆数和每堆果子的数量,求消耗最小体力值。

例如有 3 种果子,数目依次为 1, 2, 9。可以先将 1、 2堆合并,新堆数目为 1+2=3 ,耗费体力为 3 。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为 12 ,耗费体力为 12 。所以多多总共耗费体力 为3+12=15。可以证明 15 为最小的体力耗费值。

一开始是正常的方法发现会超时,后来看题解可以用优先队列。然后就去查了优先队列…

关于优先队列

声明:priority_queue< int >q;
像这道题就是从小到大 priority_queue<int,vector< int >,greater< int> >q;
(最后两个> >之间记得加空格)
如果想从大到小可以 priority_queue<int,vector< int >,less< int > >q;
操作:q.empty() //如果队列为空,则返回true,否则返回false
q.size() //返回队列中元素的个数
q.pop() //删除队首元素,但不返回其值
q.top() //返回具有最高优先级的元素值,但不删除该元素
q.push(item) //在基于优先级的适当位置插入新元素

详细代码

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值