动态规划

365 字
2 分钟
动态规划

动态规划基本概念#

  • 定义: 动态规划(DP):解决多阶段决策问题的算法思想。将复杂问题分解为更小的子问题,并存储子问题的解(状态),从而避免重复计算,提高效率。

  • 核心特点 · 最优子结构:问题的最优解包含子问题的最优解 · 重叠子问题:不同的决策序列会重复遇到相同的子问题 · 状态存储:通过表格存储已解决的子问题答案

五步思考#

  1. 定义状态表示
dp[i] // 一维状态:代表前i个元素的最优解
dp[i][j] // 二维状态:代表在位置(i,j)的最优解dp[i]
  1. 推导状态转移方程
// 核心:分析当前状态如何从之前状态推导
dp[i] = f(dp[i-1], dp[i-2], ...)

思考方向:

  1. dp[i] 是如何得来

  2. 前一步有哪些选择

  3. 初始化

// 递推开始必须有初始值
dp[0] = base_case;
dp[1] = base_case;
//确保递推起点正确,否则整个递推无意义
  1. 确定填表顺序(上到下?左到右?)
// 根据状态依赖关系确定顺序
for (int i = 1; i <= n; i++) // 从左到右
for (int i = n; i >= 1; i--) // 从右到左
  1. 确定最终结果
// 根据题意在表中找出最终答案
return dp[n]; // 可能是最后一个元素
return max(dp); // 可能是最大值
return dp[0][m-1]; // 可能是特定位置

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Profile Image of the Author
HandlerOne
おかえり
公告
本站已整理 138 篇技术笔记,并按 8 条主线排成学习路线(141 站);站内搜索与桌宠对话均已上线。
分类
标签
最新动态
站点统计
文章
138
分类
12
标签
42
总字数
597,044
站点信息
构建平台
腾讯云 · Nginx
博客版本
v6.16.8
文章目录