动态规划题目

此类题目一般用于求有多少种方法居多,由于具有重叠子问题,所以采用自下而上的方式进行求解,需要定义最终的停止条件,状态转移方程等

比如在0-1背包问题中,要求最后的最优解,那么我们将C一步一步扩大,设定的矩阵是m*C+1,m代表物品的个数,那么dp[i][j]就表示在只有j容量的情况下,i个物品的最优解,最后右下角的值就是全局最优解。

现在是状态转移方程,

动态规划的核心都有一个要么要这个A,要么不要这个B,两种情况为事件整体。针对背包问题,如果当前背包容量能容纳i这个物品,那么就要考虑放不放,最后求最大值。
不放 :dp[i][j] = dp[i-1][j]
放:dp[i][j] = V[i]+dp[i-1][j-w[i]]//由于背包是0-1的,不存在多个(完全背包),所以是i-1而不是i
然后两者求最值

动态规划就这样至下而上逐步求解底层的dp[i][j]并将其保存,方便下一次直接使用(解决了递归中子问题的重叠)。

再比如

leetcode 1143 最长公共子序列问题

由于牵扯到两个字符串所以肯定是用二维数组

问题是如何定义这个二维数组呢

显然dp[m][n] m代表text1的字符长度,n代表text2的字符长度

首先初始化矩阵
初始化行:如果text1的第一个字符在text2中出现,那

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值