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

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

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

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

第一步:思考 角色

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

  • 比如买卖股票问题:

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

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

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

第二步:考虑 过去的影响

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

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

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

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

第三步:画出状态转移图

手动画出:

  • 节点 = 状态

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

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

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

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

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

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

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

确认:

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

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

几个常见题目

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

总结:

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

http://www.dtcms.com/a/301381.html

相关文章:

  • [每周一更]-(第150期):AI Agents:从概念到实践的智能体时代
  • net8.0一键创建支持(Elastic)
  • 2025C卷 - 华为OD机试七日集训第1期 - 按算法分类,由易到难,循序渐进,玩转OD
  • Spring 容器注入时查找 Bean 的完整规则
  • Flutter中 Provider 的基础用法超详细讲解(二)之ChangeNotifierProvider
  • 力扣热题100----------53最大子数组和
  • 咨询进阶——解读40页公司战略解码方法【附全文阅读】
  • sed命令
  • 通信名词解释:I2C、USART、SPI、RS232、RS485、CAN、TCP/IP、SOCKET、modbus
  • 【通识】设计模式
  • catkin_make生成的编译文件夹目录结构说明
  • uart通信
  • python---类型转换
  • Milvus 实战全流程
  • Deja Vu: 利用上下文稀疏性提升大语言模型推理效率
  • Spring 解析 XML 配置文件的过程(从读取 XML 到生成 BeanDefinition)
  • 扩展组件(uni-ui)之uni-group
  • 「iOS」————消息传递和消息转发
  • 26.删除有序数组中的重复项
  • MyBatis-Plus高效开发实战
  • 内存管理和垃圾收集-02: 操作系统如何管理内存?
  • Linux驱动开发笔记(五)——设备树(中)——节点的标准属性
  • 益莱储:明智地投资测试仪器
  • S7-1500 与 S7-1200 存储区域保持性设置特点详解
  • 电子板原理功能区解析与PlantUML图示
  • 3,Windows11安装docker保姆级教程
  • 轻量化多模态文档处理利器SmolDocling:技术原理与场景落地引言:文档智能处理的范式革命
  • 数据结构基础内容(第六篇:二叉搜索与平衡二叉树)
  • MySQL锁机制与MVCC原理剖析
  • 直播带货工具About v1.5.10 免费版