当前位置: 首页 > 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.rkmt.cn/news/4583.html

相关文章:

  • 完整教程:C#语言入门详解(18)传值、输出、引用、数组、具名、可选参数、扩展方法
  • DevOps On Kubernetes
  • Dify实战训练营(基础班)(全免费值得收藏)
  • PostgreSQL 上的向量搜索实践
  • (读书笔记)平衡掌控者
  • 带头结点的单链表删除指定位置结点
  • 《文字、语言与数字的奇妙联结》读后感,大公司内部编码规范,本学期编码遵守规范
  • [HTTP/Spring] RestTemplate : Spring的HTTP网络请求框架
  • 博客园-我的博客-的皮肤更换
  • script setup 在 Vue 3 中的核心作用及具体实现方式
  • 容器化改造基本原理
  • Java 字节码与 ASM 框架实战解析
  • 计算机大数据毕业设计选题:基于Spark+hadoop的全球香水市场趋势分析系统 - 详解
  • 接口限流代码 - 实践
  • OutGuess 安装与问题排查指南(Kali Linux 环境)
  • 拓展操作码举例
  • TryHackMe | Cicada-3301 Vol:1
  • CF819B Mister B and PR Shifts
  • 0127_责任链模式(Chain of Responsibility)
  • Spatial 语言核心概念简介
  • spatial 一个芯片设计语言的简介 scala dsl 并行支持 -1
  • NVIDIA GPU调研: 访存通路设计
  • 图论杂题。
  • 第02周 java预习
  • 命令模式在 TPL Dataflow 反馈回路管道中的应用及问题解决
  • Anti-Proxy Attendance 题解
  • 【2024-2025第二学期】助教工作总结
  • 开始每小时记录日程
  • MySQL数据库:SQL数据类型
  • 搭建rocketmq的三主三从遇到的坑