数学建模小练习
题目B
电影《虎胆龙威 3》中,塞谬尔和布鲁斯扮演的主角要拆除西蒙所放的炸弹。西蒙喷泉上面有两个壶,容量分别是5加仑和3加仑,向其中一个壶中加入刚好 4 加仑的水,计时器会停止,否则5分钟后会爆炸。 问题:能够安全拆弹吗?要怎么做?
解:每个状态可以表示为一个元组 (x, y),其中 x 是 5 加仑壶中的水量,y 是 3 加仑壶中的水量。初始状态为 (0, 0),即两个壶都是空的。目标状态是 x = 4,即 5 加仑壶中有 4 加仑水。
可以执行以下几种操作:
填满5加仑壶:(x, y) -> (5, y)
填满 3 加仑壶:(x, y) -> (x, 3)
倒空 5 加仑壶:(x, y) -> (0, y)
倒空 3 加仑壶:(x, y) -> (x, 0)
从 5 加仑壶倒水到 3 加仑壶:倒水,直到一个壶空或者另一个壶满。
从 3 加仑壶倒水到 5 加仑壶:同样的,直到一个壶空或者另一个壶满。
BFS搜索方案
from collections import deque
# 定义 BFS 函数,返回完整的操作过程
def water_jug_bfs():# 初始状态,两个壶都是空的 (0, 0)initial_state = (0, 0)# 队列用于 BFS,每个元素不仅记录状态,还记录从初始状态到达该状态的路径queue = deque([(initial_state, [])]) # 队列中存放 (状态, 操作路径)# 用于记录已经访问过的状态,防止重复搜索visited = set([initial_state])# 定义壶的容量jug1_capacity = 5jug2_capacity = 3goal = 4 # 我们的目标是 5 加仑壶中正好有 4 加仑水# BFS 搜索过程while queue:current_state, path = queue.popleft()x, y = current_state# 如果达到了目标状态 (5加仑壶中有4加仑水),则返回成功和完整的操作路径if x == goal:return True, path + [(current_state, "最终状态")]# 产生所有可能的下一步状态,并附加上相应的操作说明next_states = [((jug1_capacity, y), "填满 5 加仑壶"), # 填满5加仑壶((x, jug2_capacity), "填满 3 加仑壶"), # 填满3加仑壶((0, y), "倒空 5 加仑壶"), # 倒空5加仑壶((x, 0), "倒空 3 加仑壶"), # 倒空3加仑壶# 从 5 加仑壶倒水到 3 加仑壶,倒的水量是 min(x, jug2_capacity - y)((x - min(x, jug2_capacity - y), y + min(x, jug2_capacity - y)), f"从 5 加仑壶倒 {min(x, jug2_capacity - y)} 加仑水到 3 加仑壶"), # 从 3 加仑壶倒水到 5 加仑壶,倒的水量是 min(y, jug1_capacity - x)((x + min(y, jug1_capacity - x), y - min(y, jug1_capacity - x)), f"从 3 加仑壶倒 {min(y, jug1_capacity - x)} 加仑水到 5 加仑壶")]# 对每个可能的下一状态进行处理for next_state, action in next_states:if next_state not in visited: # 如果没有访问过这个状态visited.add(next_state) # 标记为访问queue.append((next_state, path + [(current_state, action)])) # 加入到搜索队列中,并记录路径return False, [] # 如果找不到解,则返回 False 和空路径
# 运行 BFS
result, path = water_jug_bfs()
if result:print("可以安全拆除炸弹。操作步骤如下:")for i in range(len(path) - 1):state, action = path[i]print(f"当前状态 (5加仑壶: {state[0]} 加仑, 3加仑壶: {state[1]} 加仑) -> {action}")
else:print("无法安全拆除炸弹")
结果: 可以安全拆除炸弹。操作步骤如下: 当前状态 (5加仑壶: 0 加仑, 3加仑壶: 0 加仑) -> 填满 5 加仑壶 当前状态 (5加仑壶: 5 加仑, 3加仑壶: 0 加仑) -> 从 5 加仑壶倒 3 加仑水到 3 加仑壶 当前状态 (5加仑壶: 2 加仑, 3加仑壶: 3 加仑) -> 倒空 3 加仑壶 当前状态 (5加仑壶: 2 加仑, 3加仑壶: 0 加仑) -> 从 5 加仑壶倒 2 加仑水到 3 加仑壶 当前状态 (5加仑壶: 0 加仑, 3加仑壶: 2 加仑) -> 填满 5 加仑壶 当前状态 (5加仑壶: 5 加仑, 3加仑壶: 2 加仑) -> 从 5 加仑壶倒 1 加仑水到 3 加仑壶
故可以安全拆除炸弹,首先填满5加仑壶,然后将其中的3加仑倒入3加仑壶。接着倒空3加仑壶,并将5加仑壶剩下的2加仑倒入3加仑壶。随后再次填满5加仑壶,并将其中的1加仑倒入3加仑壶。这时,5加仑壶中剩下的正好是4加仑水,从而成功拆除炸弹。
相关文章:
数学建模小练习
题目B 电影《虎胆龙威 3》中,塞谬尔和布鲁斯扮演的主角要拆除西蒙所放的炸弹。西蒙喷泉上面有两个壶,容量分别是5加仑和3加仑,向其中一个壶中加入刚好 4 加仑的水,计时器会停止,否则5分钟后会爆炸。 问题:能够安全拆弹…...
Java爬虫:获取SKU详细信息的艺术
在电子商务的世界里,SKU(Stock Keeping Unit,库存单位)是每个商品的唯一标识符,它包含了商品的详细信息,如尺寸、颜色、价格等。对于商家和开发者来说,获取商品的SKU详细信息对于库存管理、订单…...
心理咨询展示网站建设渠道拓展
心理问题长期以来都受到关注,每个城市里也都有相关服务商家,除了进店外,线上也可以开展咨询服务,对需求者来说需要找到靠谱的品牌,而商家也需要触达到更多客户获取转化。 网站是品牌线上工具,利于商家通过…...
naocs注册中心,配置管理,openfeign在idea中实现模块间的调用,getway的使用
一 naocs注册中心步骤 1 nacos下载安装 解压安装包,直接运行bin目录下的startup.cmd 这里双击运行出现问题的情况下 (版本低的naocs) 在bin目录下 打开cmd 运行以下命令 startup.cmd -m standalone 访问地址: http://localh…...
先进封装技术 Part02---TSV科普
一、引言 随着电子设备向更小型化、更高性能的方向发展,传统的芯片互连技术已经无法满足日益增长的需求。在这样的背景下,TSV(Through-Silicon Via,硅通孔)技术应运而生,成为先进封装技术中的核心之一。 如果我们看大多数主板,可以看到两件事:第一,芯片之间的大多数连…...
【数据挖掘】2023年 Quiz 1-3 整理 带答案
目录 Quiz 1Quiz 2Quiz 3Quiz 1 Problem 1(30%). Consider the training data shown below. Here, A , B A, B A,B, and...
老古董Lisp实用主义入门教程(12):白日梦先生的白日梦
白日梦先生的白日梦 白日梦先生已经跟着大家一起学Lisp长达两个月零五天! 001 粗鲁先生Lisp再出发002 懒惰先生的Lisp开发流程003 颠倒先生的数学表达式004 完美先生的完美Lisp005 好奇先生用Lisp来探索Lisp006 好奇先生在Lisp的花园里挖呀挖呀挖007 挑剔先生给出…...
UE5 Windows热更新解决方案思路(HotPatcher+Tomcat+RuntimeFilesDownloader)
以下个人学习笔记。其中必会存在一些问题,仅作参考。本人版本5.1。 参考视频: UE4热更新:HotPatcher插件使用教程_哔哩哔哩_bilibili 3.检查需要下载的版本_哔哩哔哩_bilibili 参考文章: UE 热更新:Questions &…...
进程管理工具:非daemon进程管理工具supervisor
一、非daemon进程管理工具:supervisor Windows安装supervisor https://pypi.org/project/supervisor-win/4.5.0/#files 一)进程管理supervisor简介 supervisor是一个 Client/Server模式的系统,允许用户在类unix操作系统上监视和控制多个进程&…...
c++模拟真人鼠标轨迹算法
一.鼠标轨迹算法简介 鼠标轨迹底层实现采用 C / C语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为 DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言的兼…...
android12/13/14版本wms最新面试题:dumpsys window和sf一定会一致么?
背景: 近期学员们学习了马哥wms课程后,去参加相关的大厂的framework面试,有一个学员朋友带回来了一个wms相关的面试题,具体面试题描述如下: 问题1 请问wms的window和SurfaceFlinger的Layer有什么关系? 回…...
Python脚本示例,你可以使用这个脚本来自动化登录网站、选择页面元素和提交表单
devtools 元素页面可以选择元素,copy xpath用于查找 python编程:1、浏览器登录https://58.xxx/ 账号:xxx 密码:FN123456 2、选择“技能训练” 3、选择“云网智能运维员培训相关资料” 4、选择“L1-Linux操作系统与运维题库” 5、依次选择1-50题目&#x…...
安卓13设置动态修改设置显示版本号 版本号增加信息显示 android13增加序列号
总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 设置 =》关于平板电脑 =》版本号 在这里显示了系统的一些信息,但是这里面的信息并不包含序列号之类的信息,我们修改下系统设置,在这里增加上相关的序列号。 2.问题分析…...
从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之三:在目标服务器上恢复数据
从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之三:在目标服务器上恢复数据 目录 从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之三:在目标服务器上恢复数据一、修改参数文件的内容二、…...
相互作用感知的 3D 分子生成 VAE 模型 - DeepICL 评测
DeepICL 是一个基于相互作用感知的 3D 分子生成模型,能够在目标结合口袋内进行相互作用引导的小分子设计。DeepICL 通过利用蛋白质-配体相互作用的普遍模式作为先验知识,在有限的实验数据下也能实现高度的泛化能力。 一、背景介绍 DeepICL 来源于韩国科学…...
Java实现随机抽奖的方法有哪些
在Java中实现随机抽奖的方法,通常我们会使用java.util.Random类来生成随机数,然后基于这些随机数来选择中奖者。以下将给出几种常见的随机抽奖实现方式,包括从数组中抽取、从列表中抽取以及基于权重的抽奖方式。 1. 从数组中抽取 import ja…...
grafana加载缓慢解决方案
背景 目前随着数据和图表的逐渐增多,Grafana 页面加载速度明显变慢,严重影响了用户体验,几次都有骂娘的冲动.,因此我们需要对 Grafana 进行优化,以提升加载性能。 对于速度优化,我们可以从以下方面进行入…...
【湖南步联科技身份证】 身份证读取与酒店收银系统源码整合———未来之窗行业应用跨平台架构
一、html5 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><script type"text/javascript" src"http://51.onelink.ynwlzc.net/o2o/tpl/Merchant/static/js…...
多路复用和事件轮询机制
多路复用:Nio 服务端只有一个线程处理多个连接 事件轮询机制:select 底层用了 epoll。 select open 调用了 epoll 通过3个方法来实现事件轮询 1.epoll.create 创建epoll 多个集合 2.epoll.ctl 如果有事件会把事件挪到就绪事件列表。 3.epoll.wait 会监听…...
Android常用C++特性之std::abs
声明:本文内容生成自ChatGPT,目的是为方便大家了解学习作为引用到作者的其他文章中。 std::abs 是 C 标准库中的一个函数,用于计算整数、浮点数或其他数值类型的绝对值。它返回一个值,该值是参数的非负数形式,即去掉负…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
