[管理学]ACM动态规划入门.pptVIP

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[管理学]ACM动态规划入门

ACM程序设计 谢勇 ericxie@ 今天, 你 AC吗? 第四讲 动态规划入门 (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))就得到所要求的解了. 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物 品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2*k件过去就行了.但还是会很累,因为2*k也不小是一个不 大于n的整数.幸运的是xhd根据多年的搬东西的经验发现每搬一次的疲劳度是和左右手的物品的重量差的平方成正比(这里补充一句,xhd每次搬两件东西, 左手一件右手一件).例如xhd左手拿重量为3的物品,右手拿重量为6的物品,则他搬完这次的疲劳度为(6-3)^2 = 9.现在可怜的xhd希望知道搬完这2*k件物品后的最佳状态是怎样的(也就是最低的疲劳度),请告诉他吧. 第一感觉: 根据题目的要求,每次提的两个物品重量差越小越好,是不是每次提的物品一定是重量相邻的物品呢? 预备工作: 排序! 第二感觉: 对于一次操作,显然提的物品重量越接近越好,是不是可以贪心呢? 请思考… 详细分析: 从最简单的情况考虑: 2个物品选一对,结论显然 f(i,j) 表示前j个取i对最小的疲劳度 f(i,j) = min(f(i,j-1), f(i-1,j-2)+(item(j)-item(j-1))^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的基本思想 如果各个子问题不是独立的,不同的子问题的个数只是多项式量级,如果我们能够保存已经解决的子问题的答案,而在需要的时候再找出已求得的答案,这样就可以避免大量的重复计算。 由此而来的基本思路是——用一个表记录所有已解决的子问题的答案,不管该问题以后是否被用到,只要它被计算过,就将其结果填入表中。 课后任务: 《ACM程序设计》作业(4) ACM程序设计 作业 1-3 请补交 该加油了~ * * * * 依然没有 一、经典问题:数塔问题 有形如下图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路径上的值最大。 试想一下: 考虑一下: 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] S

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档