动态规划专题讲义noip题库.ppt

  1. 1、本文档共74页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态规划专题讲义 前言 本文只是个人对动态规划的一些见解,理论性并不一定能保证正确,有不足和缺漏之处请谅解和及时地指出. 动态规划 是信息学竞赛中选手必须熟练掌握的一种算法,他以其多元性广受出题者的喜爱. 目录 什么是动态规划 状态 阶段 决策 一种确立状态的方法 两种简单的动规武器 三种特殊的动态规划 什么是动态规划 在学习动态规划之前你一定学过搜索.那么搜索与动态规划有什么关系呢?我们来下面的一个例子. 数字三角形 给你一个数字三角形, 形式如下: 1 2 3 4 5 6 7 8 9 10 找出从第一层到最后一层的一条 路,使得所经过的权值之和最小或 者最大. 数字三角形 无论对与新手还是老手,这都是再熟悉不过的题了,很容易地,我们写出状态转移方程:f i, j a[i, j] + min f i-1, j +f i-1, j + 1 对于动态规划算法解决这个问题,我们根据状态转移方程和状态转移方向,比较容易地写出动态规划的循环表示方法。但是,当状态和转移非常复杂的时候,也许写出循环式的动态规划就不是那么简单了。 解决方法: 记忆化搜索 我们尝试从正面的思路去分析问题,如上例,不难得出一个非常简单的递归过程 : f1: f i-1,j+1 ; f2: f i-1,j ; if f1 f2 then f: f1+a[i,j] else f: f2+a[i,j]; 显而易见,这个算法就是最简单的搜索算法。时间复杂度为2n,明显是会超时的。分析一下搜索的过程,实际上,很多调用都是不必要的,也就是把产生过的最优状态,又产生了一次。为了避免浪费,很显然,我们存放一个opt数组: 记忆化搜索 Opt[i, j] - 每产生一个f i, j ,将f i, j 的值放入opt中,以后再次调用到f i, j 的时候,直接从opt[i, j]来取就可以了。 于是动态规划的状态转移方程被直观地表示出来了,这样节省了思维的难度,减少了编程的技巧,而运行时间只是相差常数的复杂度,而且在相当多的情况下,递归算法能更好地避免浪费,在比赛中是非常实用的. 动态规划的实质 可以看出动态规划的实质就是 这也就是为什么我们常说动态规划必须满足重叠子问题的原因.记忆化,正符合了这个要求. 状态 阶段 决策 或许有一种对动态规划的简单称法,叫分阶段决策.其实我认为这个称法并不是很能让人理解.那么下面我们来看看阶段,状态,决策这三者间得关系吧. 状态 阶段 决策 状态是表现出动态规划核心思想的一个东西.而分阶段决策这个东西有似乎没有提到状态,这是不科学的. 阶段,有些题目并不一定表现出一定的阶段性.数字三角形的阶段就是每一层.这里我们引入一个概念---以前状态.但阶段不是以前状态,状态是阶段的表现形式.数字三角形的以前状态就是当前层的前一层. 那什么是决策呢?我们看看下面一张图就知道了. 决策 动规的要诀-状态 我们一般在动规的时候所用到的一些数组,也就是用来存储每个状态的最优值的。 我们就从动态规划的要诀,也就是核心部分“状态”开始,来逐步了解动态规划。 拦截导弹 拦截导弹(Noip2002) 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统 有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高 于前一发的高度。 某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以 只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度,计算这套系统最多能拦截多少导弹。 拦截导弹 状态的表示-f[i],表示当第i个导弹必须选择时,前i个导弹最多能拦截多少。 每个导弹有一定的高度,当前状态就是以第i个导弹为最后一个打的导弹。以前状态就是在这个导弹以前打的那个导弹。 显然这是十分能够体现状态间的联系的题目。 最长公共子串 给出两个字符串序列。求出这样的一个最长的公共子串:子串中的每个字符都能在两个原串中找到,而且每个字符的顺序和原串中的顺序一致。 交错匹配 交错匹配(最长公共子串的改编) 给你两排数字,只能将两排中数字相同的两个位置相连,而每次相连必须有两个匹配形成一次交错,交错的连线不能再和别的交错连线有交点.问这两排数字最多能形成多少个交错匹配. 买车票 买车票 Ural1031 Ekaterinburg城到Sverdlovsk城有直线形的铁路线。 两城之间还有其他一些停靠站,总站数为N。 各站按照离Ekaterinburg城的距离编号。 Ekaterinburg城编号为1,Sverdlovsk城编号为N。 买车票 某两站之间车票价格由这两站的距离X决定. 当0 X L1时,票价为C1元. 当L1 X L2时,票价为C2元. 当L2 X L3时,票价为C3元

您可能关注的文档

文档评论(0)

知识宝库 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档