德鲁周记10--15天从0开始刷动态规划(leetcode动态规划题目类型总结)

什么是动态规划

这里我们引用维建百科的描述:“动态规划在查找有很多重叠子问题的情况的最优解时有效。它将问题重新组合成子问题,为了避免多次解决这些子问题,它们的结果都是逐渐被计算并被保存,从简单的问题直到整个问题都被解决。因此,动态规划保存递归的结果,因而不会在解决同样的问题上花费时间。动态规划只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单来说,问题能够分解成子问题来解决。”

题目类型

我们从题目入手,从简到难,一步一步学会如何处理动态规划问题。
我用亲身经历告诉你们,刷完这些题,对解决动态规划问题不会再觉得困难。
(我一共花了15天刷完以下题目,我建议不要高于21天完成以下练习)

基本一维动态规划

题目编号:

  1. 70.爬楼梯.
  2. 53.最大子序和.
  3. 198.打家劫舍.
  4. 213.打家劫舍2.
  5. 413.等差数列划分.

这五道题都是比较基础的动态规划入门题目,通过这三道题能够了解动态规划的整个流程,首先应该是确定状态方程即dp[i]=fun(dp[i-x],dp[i-y]); 先确定当前状态所依赖的之前状态的算法。这是整个动态规划的核心问题(有时涉及一些变化的技巧),也是最难的问题。然后便是建立一维数组,然后循环遍历,将之前循环的结果记录下来。当然在了解了这三道题之后,你可能会发现不用有些题可以进行空间的压缩,并不一定需要一个完整的一维数组,这也是慢慢练习掌握的技巧。

基本二维动态规划

题目编号:

  1. 64.最小路径和.
  2. 542.01矩阵.
  3. 221.最大正方形.

这三道题都是比较基础的二维动态规划入门题目,学习了一维动态规划,我们来看看二维动态规划,二维的动态规划更可能是动态规划一种常见的形式,他的转移方程可能要依赖于上一个状态和当前状态的前几次结果,状态转移方程的构建稍微有一些不同,我的建议是你先找一个样例画一个二维数组,试着模拟一下,如何根据之前的状态推出当前状态,再写出状态方程。当然在我和同学交流的过程中,也发现有人觉得直接写状态方程更直观和容易理解,这取决于自己的思维习惯,所以大家要通过不断的练习来训练。另外类似于一维动态规划,二维动态规划也可以对空间进行压缩,压缩为一维的数组,这点大家可以自己感受。

分割类问题

题目编号:

  1. 279.完全平方数.
  2. 91.解码方法.
  3. 139.单词拆分.
  4. 343.整数拆分.

接下来就进入到具体类型的动态规划问题,通过不同问题的总类我们分别学习不同的解题方法。首先是分割类问题,对于分割类问题,动态规划的状态转移方程通常并不依赖相邻的位置,而是依赖于满足分割条件的位置。通过这四道题目大家应该能有所感受。

子序列问题

题目编号:

  1. 300.最长递增子序列.
  2. 646.最长数对链.
  3. 583.两个字符串的删除操作.
  4. 1143.最长公共子序列.
  5. 376.摆动序列.

子序列问题一般都是两个字符串或数组进行比较,找出相同或者变化的子序列问题,这类问题也是非常经典的动态规划问题。对于子序列问题,第一种动态规划方法是,定义一个dp数组,其中dp[i]表示以i结尾的子序列的性质。在处理好每个位置后,统计一遍各个位置的结果即可得到题目要求的结果。第二种动态规划方法是,定义一个dp数组,其中dp[i]表示到位置i为止的子序列的性质,并不必须以i结尾。这样dp数组的最后一位结果即为题目所求,不需要再对每个位置进行统计。

背包问题

题目编号:

  1. 416.分割等和子集.
  2. 474.一和零.
  3. 322.零钱兑换.
  4. 494.目标和.

背包问题是一种组合优化的NP问题。有N个物品和容量为W的背包,每个物品都有自己的体积W和价值V,求拿那些物品可以使得背包所装下的总价值最大。如果限定每种物品只能选择0个或者1个,则为0-1背包问题如果不限定每种物品的数量,则问题称为无界背包或者完全背包问题。背包问题有时候是抽像的,即求数组中的一部分数能否相加得到目标数。背包问题是比较复杂的,建议大家看看背包9讲或者这篇博客。

链接: 九种 0-1 背包问题详解.

字符串编辑问题

题目编号:

  1. 72.编辑距离.
  2. 650.只有两个健的键盘.
  3. 10.正则表达式匹配.

字符串编辑问题是比较难的一种动态规划问题,但是也有一定技巧,这类题往往会定义一种或几种操作方式,你要做的是看透这种操作方式所对应的转移方程,当前位置来源于那几几种之前的状态。

股票问题

题目编号:

  1. 121.买卖股票的最佳时机.
  2. 188.买卖股票的最佳时机IV.
  3. 309.最佳买卖股票时机含冷冻期.
  4. 714.买卖股票的最佳时机含手续费.

股票交易类问题通常可以用动态规划来解决,对于比较复杂的问题比如含冷冻期或者含手续费的问题主要依靠状态机来解决。即当前持有股票的状态来源于前一天的哪几种状态,当前不持有股票的状态来源于前一天哪几种状态,通过状态机来找到状态转移方程。股票问题的汇总推荐大家看看这篇文章。

链接: 一个方法团灭 6 道股票问题(动态规划).

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值