第十一章 动态规划(常见基础模型).pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
动态规划(1) 基础模型 戴一桥 电信2011级 QQ前言 动态规划是信息学竞赛中选手必须熟练掌握的一种算法,他以其多元性广受出题者的喜爱。 基本模型:多阶段过程的最优化问题 使用动态规划的条件 最优化原理 无后效性 子问题的重叠性 给你一个数字三角形, 形式如下: 1 2 3 4 5 6 7 8 9 10 找出从第一层到最后一层的一条路,使得所经过的权值之和最小或者最大. 搜索? 2^n 怎么办? 动态规划! F[i][j] = max(f[i-1][j-1]],f[i-1][j])+a[i][j] 三条件 最优化原理:一个最优化策略的子策略总是最优的。 无后效性:对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态。 子问题的重叠性:动态规划将原来具有指数级时间复杂度的搜索算法改进成了具有多项式时间复杂度的算法。其中的关键在于解决冗余,这是动态规划算法的根本目的。 三要素 F[i][j] = max(f[i-1][j-1]],f[i-1][j])+a[i][j] 状态 阶段 决策 最长上升子序列 给出一个由n个数组成的序列a[1..n],找出它的最长单调子序列的长度。 问题分析: 如果前i-1个数中用到a[j] (a[j]a[i])构成了一个的最长的上升序列,加上第i个数a[i]就是前i个数中用到i的最长的序列了。 从上面的分析可以看出这样划分问题满足最优子结构,那满足无后效性么?显然对于第i个数时只考虑前i-1个数,显然满足无后效性,可以用动态规划解。 最长上升子序列 状态转移方程 f[i]=max(f[j])+1 (0=ji 且a[j]a[i]) For (i=1;i=n;i++) For (j=1;ji;j++) If (a[j]a[i]) F[i] = max(f[i],f[j]+1); 拦截导弹 poj1887 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统 有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高 于前一发的高度。 某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以 只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度,计算这套系统最多能拦截多少导弹。 状态的表示 f[i]表示当第i个导弹必须拦截时,前i个导弹最多能拦截掉多少。 状态转移方程 f[i]=max(f[j])+1 (0=ji 且a[j]a[i]) 合唱队形 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1...TiTi+1…TK(1=i=K)。 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。(poj 2711) 分别从前往后,从后往前做最长上升子序列 最后扫一遍,寻找两种序列和长度最大的值 类似的问题: 最长下降子序列 最长上升子串 最长公共子串 滑雪问题 (poj1088)Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道在一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子   1 2  3  4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 按照高度,从大到小排列,然后利用动态规划往一个高度下降的方向就可以处理,转换为类似于最长上升子序列问题 F[i]=max(f[j])+1 (a[i]a[j]) 区域动归 【石子合并】     在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。 试设计一个算法,计算出将n堆石子合并成一堆的最小代价。 阶段:石子的每一次合并过程,先两堆合并,再三堆合并,...最后N堆合并 状态: s[i,j] 表示从编号为i的石头开始合并j堆 决策:把当前阶段的合并方法细分成前一阶段已计算出的方法,选择其中的最优方案  第一阶段:两堆合并过程如下,其中 sum(i,j)表示从i开始数j个数的和               s[1,2]=s[1,1]+s[2,1]+sum(1,2)               s[2,2]=s[

文档评论(0)

xiaofei2001129 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档