动态规划
365 字
2 分钟
动态规划
动态规划基本概念
-
定义: 动态规划(DP):解决多阶段决策问题的算法思想。将复杂问题分解为更小的子问题,并存储子问题的解(状态),从而避免重复计算,提高效率。
-
核心特点 · 最优子结构:问题的最优解包含子问题的最优解 · 重叠子问题:不同的决策序列会重复遇到相同的子问题 · 状态存储:通过表格存储已解决的子问题答案
五步思考
- 定义状态表示
dp[i] // 一维状态:代表前i个元素的最优解dp[i][j] // 二维状态:代表在位置(i,j)的最优解dp[i]- 推导状态转移方程
// 核心:分析当前状态如何从之前状态推导dp[i] = f(dp[i-1], dp[i-2], ...)思考方向:
-
dp[i] 是如何得来
-
前一步有哪些选择
-
初始化
// 递推开始必须有初始值dp[0] = base_case;dp[1] = base_case;//确保递推起点正确,否则整个递推无意义- 确定填表顺序(上到下?左到右?)
// 根据状态依赖关系确定顺序for (int i = 1; i <= n; i++) // 从左到右for (int i = n; i >= 1; i--) // 从右到左- 确定最终结果
// 根据题意在表中找出最终答案return dp[n]; // 可能是最后一个元素return max(dp); // 可能是最大值return dp[0][m-1]; // 可能是特定位置文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
线性DP
算法线性DP:状态转移只依赖于前一个或前几个状态,状态之间的关系是线性的,通常可以用一维或二维数组存储状态。 三个关键要素
2
区间DP
算法定义 区间DP是用区间的左右端点来描述状态,通过小区间的解来推导出大区间的解的动态规划方法
3
背包问题
算法问题:每个物品选一次,总价值最大且不超过容量 v[]:代表体积 w[]:代表价值
4
算法错题本
算法在一个圆形操场的四周摆放 $N$ 堆石子,现要将石子有次序地合并成一堆,规定每次只能选相邻的 $2$ 堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。
5
数论
算法如果 $a$ 除以 $b$ 没有余数,那么 $a$ 就是 $b$ 的倍数,$b$ 就是 $a$ 的约数,记作 $b \mid a$。 约数,也称因数。
随机文章随机推荐

