当前位置: 首页 > news >正文

“四人过河”经典问题

一、什么是“四人过河”经典问题
最早版本见于 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 秒内写出最优方案。

http://www.wxhsa.cn/company.asp?id=3780

相关文章:

  • 完整教程:C#语言入门详解(18)传值、输出、引用、数组、具名、可选参数、扩展方法
  • DevOps On Kubernetes
  • 深耕Linux系统的道与术
  • Debugging via Intel DCI 小蓝盒
  • 我做了个 AI 文档阅读神器,免费开源!
  • 20250913 P11503 [NordicOI 2018] Nordic Camping
  • Dify实战训练营(基础班)(全免费值得收藏)
  • C 语言的历史和版本
  • PostgreSQL 上的向量搜索实践
  • 【数据结构——图与邻接矩阵】 - 实践
  • (读书笔记)平衡掌控者
  • 带头结点的单链表删除指定位置结点
  • 《文字、语言与数字的奇妙联结》读后感,大公司内部编码规范,本学期编码遵守规范
  • [HTTP/Spring] RestTemplate : Spring的HTTP网络请求框架
  • 深入解析:Linux使用-MySQL的使用
  • 博客园-我的博客-的皮肤更换
  • Apache Commons Math3 使用指南:强大的Java数学库 - 教程
  • HarmonyOS图形处理:Canvas绘制与动画开发实战
  • script setup 在 Vue 3 中的核心作用及具体实现方式
  • 0voice-1.4.1-cmake
  • test test test
  • 容器化改造基本原理
  • Blogroll 友链
  • Java 字节码与 ASM 框架实战解析
  • 计算机大数据毕业设计选题:基于Spark+hadoop的全球香水市场趋势分析系统 - 详解
  • Dos的常用命令
  • 持续集成自动化CI/CD
  • Lightroom Classic 2025(LRC 2025)安装教程(附直接安装包下载)+入门操作指南
  • 2025/09/14 【二叉树11】完全二叉树的节点个数
  • 8888