NYOJ-47过河问题

这是一道经典的贪心算法的题目。首先说一下我对这道题的理解:

  n个人要过河,已知每个人的过河时间且过河时必须要使用唯一的手电筒。桥只能允许最多

两个人同时过河。让求所有人都过河后的最短时间。

  我们不难知道:必须同时两个人过河,因为要把手电筒送回来,让为过河的人过河。使用贪

心的思想解决这个问题,首先要对这n个人的过河时间排序并保存在数组S中。这也是大多数贪心

解决问题的共同点。

  根据贪心原则,我们有两个贪心策略:

  策略A: 让最快的两个人去送最慢的两个人。首先S[0]和S[1]过河,S[0]把手电筒送回来,接着

最慢的两个人S[n-1],S[n-2]拿着手电筒过河。然后S[1]把手电筒送回来。注意:次慢的这个人相当

于没有花费时间就过去了(相对于策略B来说),这一点对于理解为什么要比较两种策略的最短时间

很重要。 此时S[0],S[1]都在未过河的这一岸,然后S[0],S[1]在接着送目前最慢的两个人S[n-3],

S[n-4],以此类推。

  策略B:一直让最快的人送当前状态最慢的人。S[0]先把S[n-1],送到对岸,拿着手电筒回来,

再送S[n-2]。相当于单独一个人依次过河,再加上最快人的送手电筒的时间。

(未完持续)

posted @ 2016-05-20 12:47  赤云封天  阅读(207)  评论(0编辑  收藏  举报