跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ 动态规划:调手表问题求解

讲解一道动态规划入门题:M78 星云手表调整问题。目标是从 0 出发,通过 +1 或 +k 操作(模 n)到达每个数字,求到达每个数字的最少步数中的最大值。采用队列优化的动态规划(类似 BFS)方法,从初始状态 0 开始,利用当前步数更新相邻状态,若新步数更小则入队继续扩散,直至队列为空。该方法能有效找到全局最优解。

指针猎手发布于 2026/3/29更新于 2026/10/26101 浏览
C++ 动态规划:调手表问题求解

一、原题复现

M78 星云的手表问题:

  • 一圈有 n 分钟(0~n-1)
  • 两个按钮:+1 和 +k
  1. +1:当前数字 +1,超过 n 就回到 0
  2. +k:当前数字 +k,超过 n 就回到 0

问:从 0 出发,调到每一个数字最少要按多少次?这些最少次数里最大的那个是多少?

二、思路分析

文章配图

这是一道经典的动态规划题目。如果从时间出发较为复杂,不妨从次数入手,来不断优化到每个时间的次数。

例如 n=5,k=3。dp[0] 赋值为 0,那么 dp[1]=1, dp[3]=1,继续 dp[2]=2, dp[4]=2。此时我们可以发现到时间 1 的路径有两条,即 0+1,和 0+3+3。这里就体现了优化的过程,用一个公式表达就是 1=(3+3)%5; dp[1]=min(dp[1], dp[3]+1)。

下面对算法流程进行说明:

文章配图 文章配图

我们可以用上面举过的例子对其进行过程分析,n=5,k=3。dp[0]=0,第一轮的情况:dp[1]=1, dp[3]=1,将其都进队;第二轮以 dp[1] 作为基准值:dp[2]=2, dp[4]=2,将其都进队;第三轮以 dp[3] 作为基准值:dp[4]=2, dp[1]=2。此时可以看到我们得到的 dp[1]>1,小于我们原来得到的 dp[1],故其不进队,dp[4] 同理。我们利用队列的本质便是用队里的元素去更新外界元素找到最小值,试想如果将 dp[1] 赋值给 2 并进队,那么接下来得到的路径是不是要比 dp[1]=1 时都要大,所以不能进队。所以也很容易想到当队列为空所有路径都走完了,且找不到更加小的值了,达到了优化的目标。

目录

  1. 一、原题复现
  2. 二、思路分析

更多推荐文章

查看全部
  • 基于 YOLO 与 SAM 微调的工业缺陷自动标注低代码方案
  • uv 精准指定 Python 版本的方法与实践
  • 公益服务平台信息管理系统设计与实现 SpringBoot Vue MySQL
  • CSS 盒子模型与美化技巧:边框阴影圆角详解
  • DeepSeek-R1 大模型微调实战:训练、部署与 AI 会话系统集成
  • 基于 Python 的 Web 与 App 端自动化测试实践
  • GitHub Copilot 使用指南
  • 国产 AI 编程助手对比:谁最像 Claude Code?差异与成本解析
  • 基于 PSO-DWA 融合的无人机三维动态避障路径规划及 MATLAB 实现
  • DeepSeek-R1 大模型基于 MS-Swift 框架部署、推理与微调实践
  • 鸿蒙 6.0 降级至 4.2 版本操作指南
  • 主流无人机厂商 RemoteID 支持情况汇总
  • Qwen2.5-7B-Instruct LoRA 微调实战 - LLaMA-Factory 单机单卡 V100
  • 利用 Maven Javadoc 插件生成项目 API 文档
  • Windows 下使用 John the Ripper 与 Hashcat 破解压缩文件密码
  • GitHub for Visual Studio 安装与协作全流程指南
  • OpenViking 部署与应用:字节跳动开源 AI 代理上下文数据库
  • DataX 的两种部署方式及 DataX-Web 可视化管理平台搭建
  • 2025 年大模型学习路线与核心知识体系解析
  • 2019 年信奥赛 C++ 提高组 CSP-S 初赛真题(完善程序第 1 题)

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online