每个题目都有超链接,点击可以跳转到题目界面!!!
买饭-优先队列
解题思路:
1.本题应该用结构体类型的优先队列来做,用来储存时间和序号;
2.要想时间最小,应该时间短的在前;
3.平均等待时间的计算方式:
假设有三个时间 12 34 8;
对应序号为1 2 3
则排序完的序号为3 1 2
平均时间为(82+121+34*0)/3;
合并果子-优先队列
本题应该利用“贪心”算法,要想总的力气最少就要每一步的力气都最小。
分析:
1:按照从小到大排列;
2:每次去除前两个数,合并后的数再压入队列(一定要再压入);
3:再用一个变量累加取出的两个数的和。
序列合并-优先队列
首先,把A和B两个序列分别从小到大排序,变成两个有序队列。这样,从A和B中各任取一个数相加得到N2个和,可以把这些和看成形成了n个有序表/队列:
A[1]+B[1] <= A[1]+B[2] <= … <= A[1]+B[N]
A[2]+B[1] <= A[2]+B[2] <= … <= A[2]+B[N]
……
A[N]+B[1] <= A[N]+B[2] <= … <= A[N]+B[N]
接下来,就相当于要将这N个有序队列进行合并排序:
首先,将这N个队列中的第一个元素放入一个优先队列中;
然后,每次取出堆中的最小值。若这个最小值来自于第k个队列,那么,就将第k个队列的下一个元素放入堆中。
时间复杂度:O(NlogN)。
合成陨石-优先队列
与合并果子完全相同,只不过要注意本题为多组。每循环一次要将队列清空,不能用memset!!!
堆-优先队列
瑞瑞的木板-优先队列
题意是合并果子的逆过程,本质还是一样的。要开long long;
本题不能用以下方法做,不能先把最长的剪出来。