算法
肥肥很菜
这个作者很懒,什么都没留下…
展开
-
动态规划
记录一下动态规划的学习动态规划(Dynamic Programming,简称DP),是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法,算法的核心就是记住已经解决过的子问题的解。三个重要概念1、最优子结构如果一个问题的解结构包含其子问题的最优解,就称此问题具有最优子结构性质。某个问题是否适合应用动态规划算法,它是否具有最优子结构性质是一个很好的线索。2、边界例如斐波那契数...原创 2018-12-17 15:37:15 · 148 阅读 · 0 评论 -
【背包问题】01背包 多重背包 完全背包
01背包0-1背包问题是指每一种物品都只有一件,可以选择放或者不放。方法一V(i,j)表示前i种物品恰放入一个容量为j的背包的最大价值,因此状态转移方程:j<w(i) V(i,j)=V(i-1,j)j>=w(i) V(i,j)=max{ V(i-1,j),V(i-1,j-w(i))+v(i) } for(int i = 0; i <= ...原创 2019-01-06 14:40:13 · 916 阅读 · 1 评论 -
【背包问题】恰好装满
前面总结了背包问题的三种情况还有一种问题:要求背包恰好装满的情况。在对二维数组初始化时:1)v[0][0]初始化为02)第一行和第一列的其他值都设为-INF(未装满的状态)原因:1)占用空间为0的物品刚好可以装满空间为0的背包2)只有上一层恰好装满时,使用状态方程得到的下一层才能是正好装满,因此初始值设为-INF,即上一层未装满时,下一层加入a[i]结果仍然是-INF即未装满。同样...原创 2019-01-06 14:50:50 · 5468 阅读 · 1 评论 -
分治法:棋盘覆盖问题
1、 分治法摘自中科大算法导论课程资料 :当求解的问题较复杂或规模较大时,不能立刻得到原问题的解,但这些问题本身具有这样的特点,它可以分解为若干个与原问题性质相类似的子问题,而这些子问题较简单可方便得到它们的解,因此通过合并这些子问题的解就可得到原问题的解。2、思路:1)将问题分解为规模更小的子问题;2)解决这些子问题;3)将已解决的子问题合并,求出原问题的解。3、经典例子:快...原创 2019-01-17 16:40:54 · 801 阅读 · 0 评论 -
贪心算法
贪心算法概念:贪心算法是指在在对问题进行求解时,“贪婪”的选择当前这一步的最优解,希望从而产生一个全局最优解。算法的关键:选择合适的“贪婪”策略。结果:贪心算法产生的结果并不一定都是最优的结果,需要进行判断,常会用到数学的证明方式。这是贪心算法的局限性之一。一些不能求解的问题可以使用动态规划来解决,例如背包问题。步骤:1)将问题分解为小问题2)根据小问题选择合适的策略(关键)3)由局部...原创 2019-02-18 17:07:01 · 158 阅读 · 0 评论