动态规划系列总结

分析流程

三步走

1. 找到问题当中的变化量,即状态,明确dp数组/函数的定义
2. 通过第i步的选择,寻找状态之间的关系,得到转移状态方程
3. 找到base case

简化dp数组

求解动态规划的核⼼问题是穷举,最开始往是通过分析通过暴力解法得到初步思路。由于暴力解法当中有许多重复部分,故增加memo,进一步改进成迭代方法得到的。
1. 暴⼒的递归解法
2. 带备忘录memo的递归解法
3. 迭代的动态规划解法

问题分类

字符串

解决两个字符串的动态规划问题,⼀般都是⽤两个指针 i, j 分别指向两个字符串的最后,然后⼀步步往前⾛,缩⼩问题的规模。
经典问题有:编辑距离, 最大公共子串

数组/字符串的子序列

  1. 涉及两个字符串/数组时,dp数组的含义如 下: 在⼦数组arr1[0…i] 和⼦数组arr2[0…j]中,我们要求的⼦序列(最长公共⼦序列)长度为dp[i][j]。
  2. 只涉及⼀个字符串/数组时:在⼦数组 array[i…j] 中,我们要求的⼦序列(最⻓回⽂⼦序列)的⻓度 为 dp[i][j] 。

经典问题:最⻓公共⼦序列,最长回⽂⼦序列

其他问题

暴力列举,分析得到子问题的最优解,找到dp数组/函数含义。
经典问题:股票买卖,打家劫舍

参考资料

labuladong算法笔记。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值