动态规划
动态规划
- 确定base case
- 状态和选择
- dp数组/函数的定义
- 寻找状态间的关系
注意
- 一般用来求最值.
- 子序列和子数组,子串分清楚
- 至少有一个不在最长公共子序列中max((dp(i -1),j),dp(i,j-1);
- 注意要求的返回值
- 使用函数记得备忘录
确定base case
不止边界条件,还应该有失败条件
eg:零钱问题,最终n < 0;表示没合适的硬币凑出相对应的金钱.
可能需要for循环赋值eg:编辑距离
选择
题目给的明显的选择
要不要,装不装,打不打……
开始另立门户
eg:最大子数组,memo[i] = Math.max(nums[i],memo[i - 1]+nums[i]);
两个指针一般从里到外
状态
- 单个状态
- 前i个状态
- 两个指针
背包问题
定义dp数组时数量在前
1 |
|
环形数组
想着怎么化成子问题,分情况
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 好高骛远!