“四人过河”经典问题

一、什么是“四人过河”经典问题
最早版本见于 MBA/奥数/信息学趣题:
N 个人(通常 N=4)要从左岸到右岸,只有一条小船,容量至多 2 人;

  • 船划行时间 = 船上所有人中最大的那一项;
  • 船不能空驶,每次必须有人把船划回来;
  • 问:让所有人到达对岸的最短总时间是多少?

二、通用数据设定
给出数组 t[1..n](升序排列),t[i] 表示第 i 个人单独划船所需时间。
例:1、2、5、10(经典 MBA 版)或 1、2、4、8(本题版)。


三、核心观察

  1. 每次往返至少“送过去 1 人、带回 1 人”,净增 1 人。
  2. 要把最慢的两个“大数”送过去,通常有两种宏观策略:
    S1 “快艇快递”——用最小的 1 号当船夫,来回接人;
    S2 “双慢合并”——让两个最慢的一起过河,避免他们分别拖时间。

四、两种基础子 routine
t1 ≤ t2 ≤ … ≤ tn

策略 操作 耗时 说明
A t1,t2 →t1 ←t1,t3 →t1 ← 2·t1 + t2 + t3 + … 1 号来回接
B t1,tn →t1 ←t1,tn-1 →t1 ← 2·t1 + tn + tn-1 把最慢两个分批送
C t1,t2 →t1 ←tn-1,tn →t2 ←t1,t2 → t2 + t1 + tn + t2 + t2 = 2·t2 + t1 + tn 双慢合并经典四步

策略 C 往往比 策略 B 更省——用“次小”代替“最小”把船带回来,减少大数出现次数。


五、通用贪心算法(适用于任意 n ≥ 3)

  1. 排序 t[1..n] 升序。
  2. 剩余未过河人数 ≥ 4 时,反复比较:
    cost1 = 2·t1 + t_{k-1} + t_k  (策略 B)
    cost2 = 2·t2 + t1 + t_k    (策略 C)
    选较小者累加,并把 k ← k-2(最慢两人已处理)。
  3. 剩余 3 人时,固定用 t1+t2+t3(一步送回)。
  4. 剩余 2 人时,一次 t1,t2 → 结束。

时间复杂度:O(n log n)(排序主导)。


六、对本题 1、2、4、8 套用
排序后 [1,2,4,8]

  • k=4:cost1=2·1+4+8=14,cost2=2·2+1+8=13 → 选 13,累加 13,剩 [1,2]
  • k=2:直接 2 → 累加 2
    总最短 = 13 + 2 = 15(与前面手算一致)。

七、记忆口诀

双慢合并优于单慢分批,只剩三人用一锅端。”

掌握以上模板,无论人数、时间数组怎样变化,都可 30 秒内写出最优方案。

posted @ 2025-09-14 18:39  kkman2000  阅读(21)  评论(0)    收藏  举报