第七章     动态规划

一、递归求解:

递归问题的关键是解决初始值和递推公式,从而将复杂问题分解为简单问题直至初始值对应的极简问题,从而得到答案。

套路:初始值+递归公式。

Trick:将求出的值存储在数组中以便复用。

二、问题1:最长递增子序列(LIS:Longest increasing subsequence):

递增子序列定义:从已知序列{a1,a2,a3…an}中取出若干数为原序列的子序列{ai1,ai2…aim},当下标ix>iy时,aix>aiy,则该序列是原序列的一个递增子序列。

第一个元素的LIS即为1,之后从序列中读入第j位新元素,之前的各位对应的LIS已知,所以如果之前第i位元素小于新元素时,则可以与j-1位元素的LIS长度Lmax比较,进行更新。

递推公式:

dp[1] = 1;

dp[j] = max{Lmax, dp[i] + 1| i<j && ai<aj}

三、问题2:最长公共子序列(LCS:longest common subsequence):

最长公共子序列定义:在字符串S中按照先后顺序依次取出若干字符构成原字符串的子串。两个字符串S1和S2,求一个最长公共子串,即为最长公共子序列。

四、总结:状态与状态转移方程:

套路:

  1. 寻找一个状态,该状态描述问题的当前状况,状态间的转移完全依赖于各状态本身。
  2. 数字量之间的递推关系即为状态转移的规则,也称为状态转移方程。确定了状态的转移规则即确定了怎么样由前序状态递推求出后续状态。

五、背包问题:

该问题主体讲解见《王道机试指南》背包篇

问题一:为何0-1背包的状态转移方程是dp[i][j] = max{dp[i-1][j-w]+v, dp[i-1][j]}? 为什么比较的右项是dp[i-1][j]而不是dp[i-1][j-w]?

因为你在这里要更新的是dp[i][j] ,并不能仅仅只考虑dp[i-1][j-w], 如果是这样的话dp[i-1][j-w]+v肯定比dp[i-1][j-w]大,还要比什么。这样写的目的是将加入第i个物品后的总价值与不加入该物品但是达到同样达到相同体积的背包总价值相比较,如果价值更大则加入第i件物品。

比如之前已经循环过体积10,30的物品,达到40时的价值为4,现在考虑体积40,价值为3的物品,相同体积加入它的价值就不如前者高,所以不放入背包。

问题二:为什么0-1背包中j要逆序循环?

因为每个物品只能使用一次。比如我们有五个物品,体积为10, 30, 20, 40,价值为1,2,3, 4。考虑正序循环代入优化后的0-1背包方程,放入第一个物品时有dp[10]=1, 由于我只有一个物品,因此在计算dp[20]的时候我希望dp[10]还是初始状态,但是在这种情况下dp[20]就会受到dp[10]的影响变为2。

逆序循环就不会存在这个问题,因为j-w<j,所以每次逆序循环的时候都可以保证dp[j-w]未受到之前循环的影响。

问题三:完全背包如何解决每种物品数都无限的问题?

正好利用了问题二,我现在每件物品都不限制数量,那么正序循环正好可以考虑到物品叠加利用的效果。

问题四:多重背包怎么拆分的?

比如一种物品数量为10,拆分成1,2,4,8,3,这五个数确实可以组合成1-10的任意整数。

转载于:https://www.cnblogs.com/yun-an/p/10962252.html

机试指南第七章-动态规划-笔记及背包问题相关推荐

  1. 《王道论坛计算机考研机试指南》第二章【经典入门】

    排序 日期类问题 Hash应用 排序 #include <iostream> #include <algorithm> using namespace std; bool cm ...

  2. 【读书笔记】《王道论坛计算机考研机试指南》第七章

    写目录 第七章 动态规划 递推求解 最长递增子序列(LIS) 最长公共子序列(LCS) 状态与状态转移方程 动态规划问题分析举例 背包问题 第七章 动态规划 递推求解 我们来看一个知名的数列一斐波那契 ...

  3. 机试指南练习-第三章

    机试指南练习总结第三章 机试指南练习总结第三章-栈的应用 例题3.1:括号匹配问题 例题3.2 :简单计算器 练习题2 :表达式求值 机试指南练习总结第三章-哈夫曼树 例题3.3:哈夫曼树 机试指南练 ...

  4. 王道考研机试指南第2版——题目提交链接

    王道考研机试指南第2版--题目链接 文章来自https://github.com/zguolee/WDAlgorithmsNote/blob/master/README.md 王道考研机试指南第2版- ...

  5. 王道考研机试指南代码合集

    王道考研机试指南代码合集 github链接 王道考研机试指南的代码合集,附有一些笔记和感悟 文件夹中包括机试指南的pdf,笔记部分,和代码对应题目的列表 如发现任何问题欢迎在下面留言 更新: 最短路题 ...

  6. 王道出版的机试指南_《王道论坛计算机考研机试指南》试读版.pdf

    <王道论坛计算机考研机试指南>试读版 王道论坛 王道论坛计算机考研机试指南 王道论坛 2013.01.06 写在前面的话 各位王道的小崽子们,今天你们考完初试了,感觉解放了吧?轻松了吧?无 ...

  7. 计算机考研机试指南(八)——数学问题

    机试指南 cha4 数学问题 % 1 #include <iostream> 2 #include <stdio.h> 3 #include <stdlib.h> ...

  8. 《深入理解计算机系统》第七章读书笔记

    <深入理解计算机系统>第七章读书笔记 第七章:连接 连接 1.连接:将各种代码和数据部分收集起来并组合成为一个单一文件的过程.这个文件可被加载或拷贝到存储器并执行. 2.连接可以执行于编译 ...

  9. Java7并发编程指南——第七章:定制并发类

    Java7并发编程指南--第七章:定制并发类 @(并发和IO流) Java7并发编程指南第七章定制并发类 思维导图 项目代码 思维导图 项目代码 GitHub:Java7ConcurrencyCook ...

最新文章

  1. Linux安装技巧--安装Uuntu与windows8/10共存
  2. java命令行 引用jar包_java命令行引用jar包
  3. JavaScript 书写方式与注释
  4. BZOJ 3925: [Zjoi2015]地震后的幻想乡(概率)
  5. 程序员这样聊天,让女神疯狂追逐你
  6. v4l2-ctl 控制命令
  7. 让《强化学习(第2版)》架起一座通往强化学习经典知识宝库的桥梁
  8. 基于耗散性的matlab,基于耗散能的沥青抗老化性能评价方法与流程
  9. 笔试 | 平安银行笔试题
  10. Power BI——数据建模案例分析
  11. 华为云 如何使用华为云提供的Ubuntu镜像源
  12. 从零开始的运维之路【标题党】
  13. 农夫过河c语言算法,农夫过河
  14. ubuntu18.04程序开机自启动
  15. Linux进程管理工具_Supervisor的安装与配置
  16. 免费java视频教程大全在线观看
  17. matlab 点云根据法向量投影到六个平面
  18. 用python处理excel 数据分析_数据分析---用python处理excel
  19. 【论文精读】Pairwise learning for medical image segmentation
  20. python中git克隆代码失败_使用Git clone代码失败的解决方法

热门文章

  1. Html代码打包后如何修改,html代码打包封装成APP教程
  2. c语言横坐标加一怎么表示,C语言 打印一个用字符表示的菱形或正(倒)三角形...
  3. Hive Cli 和 Beeline
  4. Spark内核解析之四:Spark 任务调度机制
  5. 定区关联快递员 定区关联收派时间
  6. Confluence 6 连接到 Jira 用户管理的限制
  7. 报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost...
  8. Google全球副总裁Vint Cerf:中国物联网发展不得不关注的几大问题
  9. XCODE GDB这个是老版本xcode,新版的是lldb
  10. python2.7初学(〇)