基于贪心的优先队列的解法

shencode 2022-04-07 14:44:49 2022-04-07 14:45:28 17 返回题目

思路:

  • 由题意要让补给次数最小,有一个贪心的想法是:当不能到达下一补给点时才补给,另外要补给时选择补给物资最大的补给点。

  • 我们需要将能到达的补给点的补给物资都入优先队列(大根堆),当需要补给时,取堆顶元素即可。

  • 这里可能有两种情况不能到达终点d:

1)当中途无法到达下一补给点需补给时,原始物资c加上优先队列(大根堆)中的所有元素仍不足以到达下一补给点。
2)当经过n个补给点,原始物资加上优先队列(大根堆)中的所有元素仍不足以到达终点d。
  • 其他情况,则贪心选择优先队列中那些补给物资最大的点进行补给(确保补给次数最小),若(或经过补给)能到达下一补给点(将补给物资入大根堆)或终点d,则用cnt记录补给次数即可。

  • 如此,时间复杂度为O(nlgn)。

{{ vote && vote.total.up }}