动态规划基础知识

什么是动态规划
动态规划(Dynamic Programming),简称DP,如果某一问题有很多重叠的子问题,使用动态规划是最有效的。
动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。
动态规划解题步骤
对于动态规划问题,可以拆解为五步:
(1) 确定dp数组(dp table)以及下标的含义
(2) 确定递推公式
(3) dp数组如何初始化
(4) 确定遍历顺序
(5) 举例推导dp数组
为什么要先确定递推公式,然后再考虑初始化呢?
因为一些情况是递推公式决定了dp数组要如何初始化。
动态规划如何Debug
找问题的最好方式就是把dp数组打印出来,看看究竟是不是按照自己的思路推导的。
做动规的题目,写代码之前一定要把状态转移在dp数组上的具体情况模拟一遍,心中有数,确定最后推出的是想要的结果。
然后再写代码,如果代码没通过就打印dp数组,看看是不是和自己预先推导的哪里不一样。
如果打印出来和自己预先模拟推导是一样的,那么就是自己的递推公式、初始化或者遍历顺序有问题了。
如果和自己预先模拟推导的不一样,那么就是代码实现细节有问题。
这样才是一个完整的思考过程,而不是一旦代码出问题,就毫无头绪地去修改,最后过不了,或者稀里糊涂的就过了。

猜你喜欢

转载自blog.csdn.net/weixin_46497503/article/details/112266011