合并果子
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) //在基于优先级的适当位置插入新元素
详细代码