动态规划还不清楚?看这篇包你满意!
目录
首先,先大致列下这篇文章会讲到什么
1.相较于暴力解法,动态规划带给我们的是什么?为什么会有重叠子问题以及怎么去避免的?
2.用不同难度的动态规划问题举例说明, 最后会使用《打家劫舍》系列三个题再重温一次.
一、动态规划带给我们的优势
传统递归 vs. DP
1. 先 递归解决
2. 后 动态规划解决
3. 动态规划 + 优化
二、动态规划四大解题步骤处理问题
步骤一:定义dp数组的含义
步骤二:定义状态转移方程
步骤三:初始化过程转移的初始值
步骤四:可优化点(可选)
案例一:打家劫舍I 「来自leetcode198」
步骤一: 定义dp数组的含义
步骤二:找出关系元素间的动态方程
步骤三:初始化数值设定
步骤四:优化
案例二:不同路径「来自leetcode62」
步骤一:定义dp数组的含义
步骤二:找出关系元素间的动态方程
步骤三:初始化数值设定
步骤四:优化
案例三:不同路径II 「来自leetcode63」
步骤一:定义dp数组的含义
步骤二:找出关系元素间的动态方程
步骤三:初始化数值设定
步骤四:优化
案例四:打家劫舍II 「来自leetcode213」
步骤一: 定义dp数组的含义
步骤二:找出关系元素间的动态方程
步骤三:初始化设定
步骤四:优化
案例五:打家劫舍III 「来自leetcode337」
步骤一: 定义dp数组的含义
步骤二:找出关系元素间的动态方程
步骤三:初始化设定
动态规划 – 超详细系列
该文章较长,比较详细的阐述了动态规划思想,请耐心跟着思路走下去
动态规划 – 超详细系列
动态规划,一直以来听着就是一种很高深莫测的算法思想。尤其是上学时候算法的第一堂课,老师巴拉巴拉列了一大堆的算法核心思想,贪心、回溯、动态规划… …,开始感觉要在算法世界里游刃有余的进行解决各种各样牛B问题了,没想到的还是稀里糊涂学过了之后还就真的是学过了(大学的课程还真是一个样子)。再后来才明白,大学的课程一般来说就是入门级讲解,用来开拓眼界的,真正想要有一番自己的见解,必须要在背后下一番辛苦,形成自己的思考逻辑。
再后来返回头来看,动态规划理解起来还是比较困难,什么重叠子问题、动态转移方程,优化点等等等等,稀里糊涂,最后痛定思痛,好好看着其他人的分享理解了一部分,疯狂刷题几十道。算是基本可以佛挡杀佛了.
在我的这些学习积累过程中,总结出来希望可以给到大家一点小小的帮助,相信在读完这篇文章的时候,你会感觉到动态规划给你带来的奇妙之处。也一定对动态规划形成自己的思考方式. 很