如何思考一个动态规划问题需要几个状态?

如何思考一个动态规划问题需要几个状态?

  • 第一步:思考 角色
  • 第二步:考虑 过去的影响
  • 第三步:画出状态转移图
  • 第四步:写出状态转移方程
  • 第五步:验证是否能覆盖所有路径 + 边界
  • 几个常见题目
  • 总结:

第一步:思考 角色

问自己:我当前的状态可能有哪些不同的“角色”?

  • 比如买卖股票问题:

    • 有可能是持股、卖出、休息,→ 3 种角色
  • 背包问题:

    • 角色比较固定:容量 / 物品选择

状态数 ≈ 当前时刻下,决策行为或状态的枚举情况

第二步:考虑 过去的影响

问自己:我做一个动作,会不会受到前一天某种特定状态的限制?

  • 如果有“冷冻期”,说明不是所有状态之间都能直接转移 → 你就需要引入“冷冻”这个额外状态

  • 如果只有买卖无限制,两个状态就够(持股 / 不持股)

状态数 ≈ 为了准确区分不同限制路径,你需要多少“分支状态”来表示

第三步:画出状态转移图

手动画出:

  • 节点 = 状态

  • 边 = 状态转移(由什么转到什么)

如果画出状态图后,发现某个状态没有前驱或不影响结果,那说明可能是冗余状态,可以删去

第四步:写出状态转移方程

通过写递推公式,你会发现:

  • 如果公式里无法统一表达当前动作,可能因为状态粒度不够细

  • 如果写着写着发现状态分不清,可能因为状态定义太模糊,需要拆分更多状态

第五步:验证是否能覆盖所有路径 + 边界

确认:

  • 所有可能的行为(买、卖、等)都能用已有状态表示

  • 边界条件(第一天、最后一天)状态是否有明确初始化

几个常见题目

题目 / 问题类型状态数状态解释
买卖股票(无限次,无限制)2持股 / 不持股
买卖股票(含冷冻期)3持股 / 卖出 / 冷冻
买卖股票(最多两次)4第一次买 / 第一次卖 / 第二次买 / 第二次卖
0-1 背包问题1 或 2一维表示容量,或二维加物品维度
打家劫舍(不能偷连续两家)2偷/不偷

总结:

“状态由角色定,变化看限制,画出状态图看转移是否清晰,冗余是否可合并。”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93116.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每天一个知识点】生成对抗聚类(Generative Adversarial Clustering, GAC)

📘 生成对抗聚类(Generative Adversarial Clustering, GAC) 一、研究背景与动机 聚类是无监督学习中的核心任务。传统方法如 K-means、GMM、DBSCAN 等难以适应高维、非线性、复杂结构数据。 生成对抗聚类(GAC) 融合…

Qt 窗口 工具栏QToolBar、状态栏StatusBar

每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论​: 一段时间没有更新,这段时间一直在忙各种事情,后续将再次上路持续更新C相关知识 本章将继续前面的QT篇章,本章主要讲…

FFmpeg——参数详解

FFmpeg参数详解一、基本命令结构1.1、查询参数1.1.1、version1.1.2、buildconf1.1.3、devices1.1.4、formats1.1.5、muxers1.1.6、demuxers1.1.7、codecs1.1.8、decoders1.1.9、encoders1.1.10、bsfs1.1.11、protocols1.1.12、filters1.1.13、pix_fmts1.1.14、layouts1.1.15、s…

流媒体传输:RTSP传输详解(包含RTP,RTCP,RTSP详解)

一、什么是 RTSP​协议 1.1 RTSP 协议简介​ RTSP,全称实时流传输协议(Real Time Streaming Protocol),是一种位于应用层的网络协议。它主要用于在流媒体系统中控制实时数据(如音频、视频等)的传输&#…

Python学习-----1.认识Python

目录 前言 1.关于Python博客前期的内容 2.计算机基础概念 2.1.什么是计算机? 2.2.什么是编程? 2.3.编程语言有哪些? 3.Python背景知识 3.1.Python是怎么来的? 3.2.Python都可以用来干什么? 3.3.Python的优缺点 3.4.Py…

MongoDB频繁掉线频繁断开服务的核心原因以及解决方案-卓伊凡|贝贝|莉莉|糖果

MongoDB频繁掉线频繁断开服务的核心原因以及解决方案-卓伊凡|贝贝|莉莉|糖果查看日志内容 :2025-07-22T17:05:20.2160800 I CONTROL [initandlisten] MongoDB starting : pid34231 port28018 dbpath/data/mongodb 64-bit hostVM-0-17-centos 2025-07-22T17:05:20.21…

VUE懒加载(4种方式)

第一种 使用 Webpack 的动态导入(Dynamic Imports)第二种 Vue Router 中的懒加载第三种 使用第三方库第四种 使用 Vuex 进行异步数据加载虽然不是直接的懒加载,但你可以在组件内部或 Vuex store 中使用异步 action 来加载数据,确保…

【ROS1】09-ROS通信机制——参数服务器

目录 一、参数服务器概念 二、参数操作 2.1 C实现 2.1.1 新增参数 2.1.2 修改参数 2.1.3 查询参数 2.1.4 删除参数 2.2 python实现 2.2.1 新增参数 2.2.2 修改参数 2.2.3 查询参数 2.2.4 删除参数 一、参数服务器概念 假设正在开发一个复杂的机器人应用&#xff0…

C#.NET dapper 详解

简介 Dapper 是由 Stack Overflow 团队开发的一个简单、高性能的微型 ORM(Object‑Relational Mapper),仅几千行代码,依赖于 ADO.NET 的 IDbConnection,通过动态生成 IL 来映射结果到实体对象。 与 EF、NHibernate 这类…

【LeetCode 热题 100】35. 搜索插入位置——二分查找(左闭右开)

Problem: 35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 文章目录整体思路完整代码时空复杂度时间…

Python-初学openCV——图像预处理(四)——滤波器

目录 一、图像噪点消除噪声: 1、概念 2、均值滤波 3、方框滤波 4 、高斯滤波 5、中值滤波 6、双边滤波 7、总结 一、图像噪点消除噪声: 1、概念 指图像中的一些干扰因素,通常是由图像采集设备、传输信道等因素造成的,表现…

嵌入式系统可靠性设计

嵌入式系统可靠性设计硬件件可靠性设计1. 硬件设计原则2. 硬件设计注意问题2.1 引脚布局和走线2.2 元器件选择和布局2.3 电源和地线分离2.4 EMI/EMC设计2.5 系统可靠性2.6 资源利用和扩展性软件可靠性设计1. 设计原则1.1 模块化设计1.2 冗余设计1.3 容错设计1.4 实时性保障1.5 …

cJSON在STM32单片机上使用遇到解析数据失败问题

我们在单片机上解析JSON格式时(比如在用云平台物联网开发时),可以直接使用cJson库来完成自己的操作,而不需要单独实现,具体使用方法可以搜一下。 cJson:一个基于 C 语言的 Json 库,它是一个开源…

python3基础语法梳理(三)

接上一篇博客 🎮 猜数字小游戏 - Python版 🧠 游戏规则: 系统随机生成一个 1 到 10 的整数玩家输入猜测的数字使用 if 语句判断玩家猜得是否正确提示“猜对了”或“太大/太小了” import randomsecret_number random.randint(1, 10) att…

【docker】将已有mysql脚本导入镜像内使用

准备SQL脚本将SQL脚本(如init.sql)放在宿主机目录下,例如:/path/to/sql-scripts/init.sql启动MySQL容器并挂载脚本使用 -v 参数将SQL脚本挂载到容器的初始化目录:docker run --name mysql-container \-e MYSQL_ROOT_PA…

【机器学习深度学习】LLamaFactory微调效果与vllm部署效果不一致如何解决

目录 前言 一、问题本质 1.1 问题说明 1.2 问题本质示意 二、常见原因 LLaMAFactory对话模板规则定义 模型对话模板定义规则 三、解决方法 提取代码myset.py 创建jinja文件 安装VLLM 运行VLLM 安装运行open webui流程 四、流程梳理 前言 本文主要讲述的主要内容…

Python入门构建网页

用纯 Python 构建 Web 应用 本教程将带你从零开始,构建一个交互式的待办事项清单。 fasthtml 的核心哲学是“回归初心,大道至简”。在当今复杂的前后端分离技术栈中 ,它提供了一条返璞归真的路径,旨在让你能用纯粹的 Python 构建从…

开源 Arkts 鸿蒙应用 开发(九)通讯--tcp客户端

文章的目的为了记录使用Arkts 进行Harmony app 开发学习的经历。本职为嵌入式软件开发,公司安排开发app,临时学习,完成app的开发。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。 相关链接: 开源 Arkts …

Go的defer和recover

在 Go 语言中,defer 和 recover 是两个紧密相关的关键字,主要用于错误处理和资源清理。它们通常一起使用,特别是在处理panic(运行时崩溃)时,确保程序不会直接崩溃,而是能够优雅地恢复并继续执行…

Spring Boot 配置文件常用配置属性详解(application.properties / application.yml)

前言 Spring Boot 的一大优势就是通过简单的配置文件即可快速定制应用行为,而无需编写大量 XML 配置或 Java 代码。Spring Boot 使用 application.properties 或 application.yml 作为核心配置文件,支持丰富的配置属性。 本文将详细介绍 Spring Boot 常用…