网站大量收购独家精品文档,联系QQ:2885784924

(HDUACM05)动态规划.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(HDUACM05)动态规划

ACM程序设计 杭州电子科技大学 刘春英 acm@hdu.edu.cn 4月份比赛 是 ! 每周一星(4): 知识回顾 递推求解... 第五讲 动态规划 (Dynamic programming) 用暴力的方法,可以吗? 这道题如果用枚举法(暴力思想),在数塔层数稍大的情况下(如31),则需要列举出的路径条数将是一个非常庞大的数目(2^30= 1024^3 10^9=10亿)。 拒绝暴力,倡导和谐~ 从顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还是从右走能取到最大值,只要左右两道路径上的最大值求出来了才能作出决策。 同样,下一层的走向又要取决于再下一层上的最大值是否已经求出才能决策。这样一层一层推下去,直到倒数第二层时就非常明了。 如数字2,只要选择它下面较大值的结点19前进就可以了。所以实际求解时,可从底层开始,层层递进,最后得到最大值。 结论:自顶向下的分析,自底向上的计算。 思考:免费馅饼 如何解决? 请发表见解 ? 威威猫系列故事——打地鼠 二、经典问题:最长有序子序列 解决方案: 思考 1160 FatMouses Speed Sample Input 6008 1300 6000 2100 500 2000 1000 4000 1100 3000 6000 2000 8000 1400 6000 1200 2000 1900 再思考(1087 期末考试题) Super Jumping! Jumping! Juping! 解题思路? 三、经典问题:最长公共子序列 HDOJ-1159: Sample Input abcfbc abfcab programming contest abcd mnp 子结构特征: f(i,j)= { 由于f(i,j)只和f(i-1,j-1), f(i-1,j)和f(i,j-1)有关, 而在计算f(i,j)时, 只要选择一个合适的顺序, 就可以保证这三项都已经计算出来了, 这样就可以计算出f(i,j). 这样一直推到f(len(a),len(b))就得到所要求的解了. 第一感觉: 根据题目的要求,每次提的两个物品重量差越小越好,是不是每次提的物品一定是重量相邻的物品呢? 预备工作: 排序! 第二感觉: 对于一次操作,显然提的物品重量越接近越好,是不是可以贪心呢? 请思考… 详细分析: 从最简单的情况考虑: 2个物品选一对,结论显然 算法分析:典型的DP! 状态转移方程? F(n)=min(F(i)*2,F(j)*3,F(k)*5,F(m)*7) (ni,j,k,m) 特别的: i,j,k,m 只有在本项被选中后才移动 小结:DP的基本思想 如果各个子问题不是独立的,不同的子问题的个数只是多项式量级,如果我们能够保存已经解决的子问题的答案,而在需要的时候再找出已求得的答案,这样就可以避免大量的重复计算。 由此而来的基本思路是——用一个表记录所有已解决的子问题的答案,不管该问题以后是否被用到,只要它被计算过,就将其结果填入表中。 课后任务: WebDIY在线作业(5): 201403《ACM程序设计》作业(5)—— 刘春英老师 Welcome to HDOJ 该加油了~ * * * * 组队赛 poursoul 一、经典问题:数塔问题 有形如下图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路径上的值最大。 试想一下: 考虑一下: 再思考: 9 6 3 8 5 2 7 4 1 Num[I] 8 7 6 5 4 3 2 1 0 I 9 6 3 8 5 2 7 4 1 Num[I] 8 7 6 5 4 3 2 1 0 I 5 4 3 4 3 2 3 2 1 F[I] Sample Output 4 4 5 9 7 Sample Output 4 2 0 4 4 3 3 2 1 b 4 3 3 3 2 1 a 4 3 3 3 2 1 c 3 3 3 2 2 1 f 2 2 2 2 2 1 b 1 1 1 1 1 1 a c b f c b a 辅助空间变化示意图 f(i-1,j-1)+1 (a[i]==b[j]) max(f(i-1,j),f(i,j-1)) (a[i]!=b[j]) 四、经典问题:1421 搬寝室 Sample Input 2 1 1 3 Sample Output 4 证明:假设四个从小到大的数:a、b、c、d,只需证明以下表达式成立即可: (a-b)^2+(c-d)^2 (a-c)^2+(b-d)^2 (a

您可能关注的文档

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档