动态规划思路
Dynamitic Plan
-
动态规划:
- 试图仅仅解决每个子问题一次,从而减少计算量;一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下一次需要使用时直接查表,避免重复计算
-
使用要求:
- 计算时有大量重叠子问题时,求
最优解
- 最优子结构:大问题的最优解可以由小问题的最优解推出
- 无后效性:一旦f(n)确定,那么之后直接调用它的值就可以,不要再去关心 f(n)的计算过程
- 计算时有大量重叠子问题时,求
流程
- 一般流程
- 一般流程就是三步:暴力的递归解法 -> 带备忘录的递归解法 -> 迭代的动态规划解法。
- 思考流程
- '找到状态和选择' -> '明确' dp 数组/函数的定义 -> 寻找状态之间的关系。
解析
状态定义
:dp[i]的值代表什么转移方程
:根据情况题目要求定义,形如dp[i+1]=dp[i]+dp[i-1]初始状态
:根据情况题目要求定义,形如dp[0]=?,dp[1]=?.....返回值
:dp[n]为什么
严律己、宽待人