![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 52
是馨呀!
这个作者很懒,什么都没留下…
展开
-
回文子串系列
回文串是一个正读和反读都一样的字符串(abccba)。一般有两种方法,中心扩展法和动态规划。主要介绍动态规划。原创 2023-01-15 12:44:03 · 296 阅读 · 0 评论 -
打家劫舍问题
对于环形就是相当于第一个和最后一个房屋不可以同时偷,那么分两种情况,注意需要转换到偷的上面。不偷第一个,相当于偷第2个到偷第n个。不偷第n个,相当于偷第1个到偷第n-1个。取这两种情况的最大。原创 2023-01-07 12:09:50 · 221 阅读 · 0 评论 -
139. 单词拆分 javaScript实现
【代码】139. 单词拆分 javaScript实现。原创 2023-01-05 19:39:50 · 197 阅读 · 0 评论 -
背包问题:01背包+完全背包+有关题目
使用二维数组 dp[i] [j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。确定递推公式dp数组的初始化首先从dp[i][j] 的定义出发,如果背包容量j为0的话,即dp [i] [0] ,无论是选取哪些物品,背包价值总和一定为0。如图:状态转移方程 dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);可以看出i 是由 i-1 推导出来,那么i为0的时候就一定要初始化。原创 2022-12-15 19:22:26 · 578 阅读 · 0 评论 -
96. 不同的二叉搜索树 JavaScript实现
即 dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]。j 相当于是头结点的元素,从1遍历到i为止。所以递推公式:dp[i] += dp[j - 1] * dp[i - j];,j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量。首先一定是遍历节点数,从递归公式:dp[i] += dp[j - 1] * dp[i - j]可以看出,节点数为i的状态是依靠 i之前节点数的状态。那么遍历i里面每一个数作为头结点的状态,用j来遍历。原创 2022-12-13 19:55:25 · 98 阅读 · 0 评论 -
不同路径问题: 62. 不同路径 + 63. 不同路径 II
【代码】不同路径问题。原创 2022-12-13 17:13:56 · 205 阅读 · 0 评论 -
64. 最小路径和 JavaScript实现
题目链接这个题目和1143.最长公共子序列思想类似,1143最后构建的也是网格,然后根据不同的位置去更新网格的值。动态规划求解的原因:由于每个元素对应的最小路径和与其相邻元素对应的最小路径和有关,所以可以使用动态规划求解1、dp数组的含义dp[i][j] 表示 从左上角出发到网格中(i,j)位置的最小路径和。则dp[m-1][n-1]时最后的结果,即右下角的元素。2、初始化dp数组dp[0][0] = grid[0][0]3、状态转移方程三、代码优化可以不用重新创建一个dp数组进行存储,可以在原原创 2022-06-15 21:31:47 · 131 阅读 · 0 评论 -
动态规划基础题: 509. 斐波那契数 + 70. 爬楼梯
509. 斐波那契数题目链接一、动态规划1、确定dp数组的含义dp[i]代表第i个数的斐波那契数,dp是一个长度为n的数组,需要把每个数对应的斐波那契数存进去。2、状态转移方程F(n) = F(n - 1) + F(n - 2)3、初始化dp数组F(0) = 0,F(1) = 14、遍历顺序dp[i]是依赖 dp[i - 1] 和 dp[i - 2],所以遍历顺序是从前往后二、代码实现var fib = function(n) { // 1、定义dp数组,数组是一个长为n的数原创 2022-05-25 14:21:56 · 101 阅读 · 0 评论 -
子序列问题总和(连续+非连续)
300. 最长递增子序列题目链接题目详解一、思想 – 动态规划1、dp[i] 是指从0位置到i位置,并且以i位置结尾的序列的最长递增子序列的长度2、状态转移方程假设我们已经知道了 dp[0…4] 的所有结果,我们如何通过这些已知结果推出 dp[5] 呢?nums[5] = 3,既然是递增子序列,我们只要找到前面那些结尾比 3 小的子序列,然后把 3 接到最后,就可以形成一个新的递增子序列,而且这个新的子序列长度加一。二、代码实现var lengthOfLIS = function(num原创 2022-05-11 19:27:57 · 736 阅读 · 0 评论 -
买卖股票问题
1、状态:有两种状态:持有或者没有股票。每天的状态是其中之一。2、当天是否持有股票的最大利润 = max ( 前一天是否持有股票的最大利润, 今天是否买卖股票所造成的利润)原创 2022-04-20 19:48:46 · 961 阅读 · 0 评论 -
动态规划DP思想
贪心和动态规划动态规划是由前一个状态推导出来的,而贪心是局部直接选最优的。1、贪心(1)定义贪心的本质是选择每一阶段的局部最优,从而达到全局最优形象理解:例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最2、动态规划DP(1)定义动态规划中每一个状态一定是由上一个状态推导出来的。如果某一问题有很多重叠子问题,使用动态规划是最有效的。形象理解:如果是 有一堆盒子原创 2022-03-30 16:02:47 · 454 阅读 · 0 评论