题目描述
有 N
个人要过河,船每次只能坐两个人,船载每个人过河所需时间 t[i]
不同,每次过河时间为船上较慢的那个人的时间,且船划过去后要有一个人把船划回来。求最快的过河时间。
贪心算法原理
- 基本思想
- 贪心算法在每一步都选择当前看起来最优的选择,希望通过一系列局部最优解得到全局最优解。对于这个问题,贪心策略是尽量让用时最短的人多往返划船来节省时间,同时合理搭配人员过河。
- 贪心策略体现
- 考虑每次过河的情况,尽量让速度快的人把速度慢的人送过去,然后速度快的人再回来,这样可以减少整体的过河时间。
贪心算法步骤
- 初始化与排序
- 将每个人过河的时间
t[i]
进行排序,方便后续选择最快和最慢的人。
- 将每个人过河的时间
- 分情况计算
- 当人数
N
为 1 时,直接返回该人的过河时间,因为只有一个人,直接过河即可。 - 当人数
N
为 2 时,返回较慢那个人的过河时间,因为两人一起过河,时间取决于较慢的人。 - 当人数
N
为 3 时,选择让最快的人分别送其他两人过河,总时间为t[0] + t[1] + t[2]
(其中t[0]
是最快的人的时间),因为这样可以保证每次过河的时间都是相对较短的。 - 当人数
N
大于 3 时:- 每次选择最快的两个人(设为
a
和b
,a < b
)和最慢的两个人(设为y
和z
,y < z
)。 - 第一种方案是让
a
和b
过河,然后a
回来,y
和
- 每次选择最快的两个人(设为
- 当人数