动态规划常见套路

本章纯属套路,零基础估计有点看不懂

求解动态规划最重要的一步就是定义dp[]这样的数组是什么意思,一定要搞清楚,这时解题目的关键

第一 动态规划要想求解最后一个状态,肯定最外面得来个整个数组的for循环,这样依次根据每个状态之间的关系,通过这个for循环就能够得出最终状态的值,这里的for循环肯定是从左到右的,因为这种类型的动态规划是求解最后一个状态

第二 for循环中每个状态的求解,如果要依赖于这个状态之前的所有状态的话,那么里面的每个状态同样也得来个for循环,这种情况就有点复杂了

第三 并不是所有的动态规划都是求解数组中最后的一个状态,这时有可能是根据数组中的所有状态来求解一个其中的一个最值。这时如果你顺着for循环来依次看每个状态之间的关系不好看,这时你就可以逆着来for循环,这样逆着有可能会更好的求出每个状态之间的关系。这时就可以根据逆着来各个之间的关系来把中间的状态求解出来

第四动态规划中二维数组,其实表示着两层意思在一个dp中,分别是横坐标和纵坐标,横坐标表示着一层意思。纵坐标也表示着一层意思。通常纵坐标表示的是"分类"。横坐标表示当前的位置。

第五矩阵情况一般都是用二维dp,横坐标为第一维,纵坐标为第二维度,并且通常还有一个方向数组。

第六对于那种你分不清楚多少组的问题,有可能要分很多组,反正你就是搞不清楚到底要分多少组的问题。你就别去纠结要分多少组了,你就直接定义一个dp[i] 默认已经分好了。

常见的动态规划模型

最大字段和

在这里插入图片描述

最长上升子序列 LIS

在这里插入图片描述在这里插入图片描述

最长公共子序列 LCS

注意注意:这里和上面的LIS有一点儿不同,上面的LIS中dp[i]必须要以i位置上的这个数字为结尾,而LCS中i和j仅仅是表示前i位和前j位的最长公共子序列,并不一定要以这个为结尾,只是到第i位和第j位为止

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值