![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
卖萌鸡尾酒
这个作者很懒,什么都没留下…
展开
-
浅谈动态规划(01背包问题)
一、 背景:可能许多人认为动态规划这种东西是特别高级的算法,于是心中把这种算法捧上了天,心中对动态规划产生忌惮。这篇文章晚上闲着没事干,单纯依靠自己头脑记忆敲出来的。不夹杂书中枯燥无味的原理。二、 动态规划概叙:动态规划又叫做 “填表法”,所谓 ”填表“ 就是表面意思,给你一个表来填。编程角度上讲就是给二维数组赋值(此处二维只是个例子,并不是所有的表都是二维)。表就是记录过程的一张备忘录。三、...原创 2019-10-19 00:53:32 · 501 阅读 · 7 评论 -
动态规划专题5——编辑距离
一、问题描述:设A和B是两个字符串,需要用最少的字符操作将字符串A转换为字符串B。这些操作包括:(1)删除一个字符;(2)插入一个字符;(3)将一个字符修改为另一个字符。将字符串A变换为字符串B所用的最少字符操作数称为字符串A和B的编辑距离,记为d(A,B)。设计有效算法,对任给的2个字符串A和B,计算它们的编辑距离。样例输入:fxpimu、xwrs样例输出:5二、问题分析:不用管他...原创 2019-10-24 00:11:10 · 392 阅读 · 4 评论 -
动态规划思想总结
1、自底向上:思想是逆向的,但也能正向解答。两者是相同的,只是求解顺序不一样。2、状态转移方程:对于这个,我只能说,暴力怎么解,动态规划就怎么解。因为求解动态规划的顺序是先暴力递归——带备忘录的递归——动态规划。并且看博客多了的人会发现,其实递归的递归体就是动态规划的状态转移方程。3、最优子问题:大问题分成小问题,小问题寻找最优解构成大问题的最优解。这一点不必太在意,因为求解的过程就是在求解小...原创 2019-10-23 12:53:43 · 2704 阅读 · 1 评论 -
动态规划专题4——最长递增子序列
一、问题:a[] = {2,1,5,3,6,4,8,9,7} 最长是 5 (1,3,4,8,9)二、问题分析:dp数组设一维,因为只有一个数组。dp数组存的是前 j 项最大递增子序列的个数。如果当前比前面的数大,那就前面的个数 + 1。(前面的意思是,当前这个数前面所有。)三、状态转移方程:dp[i] = max(dp[i],dp[j] + 1)其中 :i 是当前数字, j 是从 0 开...原创 2019-10-23 12:09:08 · 223 阅读 · 0 评论 -
动态规划专题2——数字三角形最小路径问题
一、问题:看图二、问题分析:每个整数只能出发向下移动到相邻的整数。显然如果是从上往下看的话,路径会有很多。这时候就用到了动态规划的思想,自底向上。从最下面一层一直到最上面,因此到最后a[0][0]就是问题的答案。那么如何表达呢?1、然后a数组从倒数第二行开始进行加法,2、得到a[0][0]结果。两步,轻轻松松。三、代码:如下int a[100][100] ={ {2}, {3,4}...原创 2019-10-23 11:42:51 · 739 阅读 · 0 评论 -
动态规划专题1——最大连续子序列和
一、问题:a[] = {0, -2, 11, -4, 13, -5,-2},求最大连续子序列和。二、问题分析:题目蕴涵着贪心的思想。就是选取元素的时候第一个和最后一个必须是正数,这样得到的子序列和才会是最大的。但是一味的贪心无法得到正确的结果,贪心只会求得所有正数的和,题目求的是最优解并且子问题独立,很自然而然的想到动态规划。那么这样的思想怎么表达出来呢?首先,如果前面的和加上当前选取的元素没...原创 2019-10-23 11:41:59 · 1418 阅读 · 0 评论 -
动态规划专题三——最长公共子序列
一、问题:例如,X = {a, b, c, b, d}, Y = {b, c, f, b},最长公共子序列为{b, c, b}二、问题分析:X1X2… Xm的长度为m,Y1Y2…Ym的长度为n,Z1Z2…Zk为公共子序列。(1)假如Xm == Yn,即最后一个元素相同,则必有Zk = Xm = Yn,且Z1…Z(k-1)是X1…X(m-1)和Y1…Y(n-1)的最长公共子序列。(2)假如Xm...原创 2019-10-23 11:41:13 · 1305 阅读 · 4 评论