![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
堆
disPlayLzy_
梦在前方,路在脚下
展开
-
洛谷 P2085 最小函数值(minval)
题目大意: 在很多个函数a[i]*x^2+b[i]*x+c[i],求出最小的M个。 堆: 1.将x=1时的全部函数加入堆里建立一个堆。 2.每次找最小的函数输出,然后把这个函数的x+1的结果加入堆,排序。 时间复杂度:O(N+M)var a:array [0..10001,1..3] of longint; f,b:Array [0..10001] of longint;原创 2017-03-01 16:57:07 · 576 阅读 · 0 评论 -
Jzoj P5461 购物___优先队列
#题目大意:有nnn件商品,价格为P1,P2,...,PnP_1,P_2,...,P_nP1,P2,...,Pn,有现金MMM元,以及kkk 张优惠券。对某件商品使用一张优惠券,价格会下降到QiQiQi,每件商品有且只有一件,优惠券对每件商品至多使用一次。#分析:我们先将降价后最小的Q1,Q2..QkQ_1,Q_2..Q_kQ1,Q2..Qk全部累加,然后可以利用优先队列建堆...原创 2018-09-22 21:24:47 · 229 阅读 · 0 评论 -
Jzoj P1142.剑与魔法___优先队列
题目大意:事件分为两类:战役事件CASECASECASE和穿越回去事件ENDENDEND。 战役事件可以选择是否参加,参加后会获得一定金钱。 END事件发生需要至少参加一定数量的战役事件。 特别的是,END事件如果满足要求就会强制发生。 要求只有最后一个END事件会发生。 问此时获得最多的金钱数,无法满足则输出−1−1-1N<=200,000N<=200,000N10...原创 2018-09-08 16:01:56 · 222 阅读 · 0 评论 -
Poj P1456 Supermarket___小根堆
题目大意:多组数据,每组给出一个NNN,表示有NNN个商品,每个商品都有一个利润pipip_i跟过期时间didid_i,每天能卖出去一个商品,过期商品不能卖,问如何安排卖出商品顺序能使利润最大,求最大利润。0≤N≤1040≤N≤1040≤N≤10^4 1≤pi,di≤1041≤pi,di≤1041≤p_i,d_i≤10^4分析:按过期时间排序, 建一个以pipip_i为权值...原创 2018-08-08 16:55:46 · 191 阅读 · 0 评论 -
Poj P2442 Sequence___最小堆
题目大意:多组数据,每组给出MMM个序列,每个序列有NNN个元素,从每个序列中任选一个数求和,显然有NMNMN^M种和,求最小的NNN个序列和分别是多少。0<m<=100,0<n<=20000<m<=100,0<n<=20000 < m NNN小的序列和, 因为对优先队列的运用不熟练,所以写的比较生疏, 大致就是,设我们已经做完了前iii...原创 2018-08-09 22:19:27 · 165 阅读 · 0 评论 -
Poj P3190 Stall Reservations___贪心+优先队列
题目大意:NNN头奶牛吃草,吃草时间分别为a[1].la[1].la[1].l到a[1].ra[1].ra[1].r,a[2].la[2].la[2].l到a[2].ra[2].ra[2].r,….,a[N−1].la[N−1].la[N-1].l到a[N−1].ra[N−1].ra[N-1].r,a[N].la[N].la[N].l到a[N].ra[N].ra[N].r,问最少要多少个畜栏才...原创 2018-08-04 18:29:16 · 220 阅读 · 0 评论 -
POJ P2442 Sequence
题目大意:给你T组n*m的矩阵,每组矩阵每行取一个元素,组成一个包含n个元素的序列,一共有n^m种序列,让你求出序列和最小的前n个序列的序列和。堆: 1.把第T组数据的第一组数组给记录。 2.从第二组到第N组开始,a[j]表示前i-1组第j大的序列和,i为当前第i组。 3.把前M大的a[j],跟这组数组组合,如果有一个比第M大的大就替换,然后替换堆并且做下移操作,因为做的是大头堆。 4.把最原创 2017-03-02 16:48:36 · 315 阅读 · 0 评论 -
SSL P1411 推销
题目大意: 每次加入多个新的数,然后累加每次最大-最小的值,再把最大跟最小的数删除。堆: f[j]表示数j出现的次数。 1.因为数最大为1000000,所以来一波桶- - 2.每加入一次数,就inc(f[j]).j为这个数 3.每加入完一组数,从1开始找最小,再从1000000开始找最大,找到以后,把他们出现的次数减去1,然后累加他们的差。var f:array [0..1000001原创 2017-03-01 20:21:35 · 344 阅读 · 0 评论 -
SSL P2670 作业
题目大意: 老师给小A布置了n项作业,每一项作业都有截止时间di和价值vi(你可以理解成每做完一份作业就要快递过去给老师,且快递是不耗费时间的),每完成一项作业便可获得其价值。但小A发现,自己每一个单位时间内只能完成其中的一项作业,请你告诉小A,他最多可以获得多少价值。 【数据规模与约定】 对于前30%的数据,n<=100. 对于前60%的数据,n<=1000,di<=n 对于100%原创 2017-10-05 20:43:50 · 319 阅读 · 0 评论 -
jzoj P2152【2017.7.7普及】终极数
题目大意: 给定一个长度为n的序列a,试求出对于序列a的每一个前缀的终极数x,使得 最小,试求出终极数t(如若有多个终极数t,只需输出最小的那个)题解: 虽然看似很迷,其实就是每次插入后的中位数中排序后的中位数: 我们维护两个堆来处理,一个大根堆,一个小根堆,当前每次加入一个数,必须保证 小根堆的个数大于等于大根堆的个数,可以理解为——第一次加入数的时候肯定是放 到最小堆。 其次,原创 2017-07-08 18:34:48 · 434 阅读 · 0 评论 -
USACO 3.1 丑数 Humble Numbers
Description 对于一给定的素数集合 S = {p1, p2, …, pK}, 来考虑那些质因数全部属于S 的数的集合。这个集合包括,p1, p1p2, p1p1, 和 p1p2p3 (还有其它)。这是个对于一个输入的S的丑数集合。 注意:我们不认为1 是一个丑数。 你的工作是对于输入的集合S去寻找集合中的第N个丑数。longint(signed 32-bit)对于程序是足原创 2017-01-12 11:12:22 · 846 阅读 · 0 评论 -
洛谷 P1090 合并果子
Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要原创 2016-12-23 21:35:34 · 634 阅读 · 0 评论 -
Jzoj P4754 矩阵___map+小根堆
题目大意:分析:因为权值非负,一个矩阵的权值肯定≥其子矩阵。那么建立一个堆,开始把所有最小的和谐矩阵加入堆,每次从堆中取出最小的和谐矩阵,同时扩展出最多四个新的和谐矩阵(上下左右多一行或一列),注意判重,重复kkk次即可。然后注意一下每个矩阵拓展的时候只需要→↓或者←↑ 2个方向即可,4个方向会炸代码:#include <iostream>#include <c...原创 2019-03-18 18:41:16 · 178 阅读 · 0 评论