思路:
-
由题意要让补给次数最小,有一个贪心的想法是:当不能到达下一补给点时才补给,另外要补给时选择补给物资最大的补给点。
-
我们需要将能到达的补给点的补给物资都入优先队列(大根堆),当需要补给时,取堆顶元素即可。
-
这里可能有两种情况不能到达终点d:
1)当中途无法到达下一补给点需补给时,原始物资c加上优先队列(大根堆)中的所有元素仍不足以到达下一补给点。
2)当经过n个补给点,原始物资加上优先队列(大根堆)中的所有元素仍不足以到达终点d。
-
其他情况,则贪心选择优先队列中那些补给物资最大的点进行补给(确保补给次数最小),若(或经过补给)能到达下一补给点(将补给物资入大根堆)或终点d,则用cnt记录补给次数即可。
-
如此,时间复杂度为O(nlgn)。