ACM动态规划入门课件_第1页
ACM动态规划入门课件_第2页
ACM动态规划入门课件_第3页
ACM动态规划入门课件_第4页
ACM动态规划入门课件_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ACM程序设计谢勇ericxiesina2022/7/271今天,你 AC吗?依然没有2022/7/272第四讲动态规划入门(Dynamic programming)2022/7/273一、经典问题:数塔问题 有形如下图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路径上的值最大。2022/7/274用暴力的方法,可以吗?2022/7/275这道题如果用枚举法(暴力思想),在数塔层数稍大的情况下(如31),则需要列举出的路径条数将是一个非常庞大的数目(230= 10243 109=10亿)。试想一下:2022/7/276 拒绝暴力,倡导和谐202

2、2/7/277从顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还是从右走能取到最大值,只要左右两道路径上的最大值求出来了才能作出决策。同样,下一层的走向又要取决于再下一层上的最大值是否已经求出才能决策。这样一层一层推下去,直到倒数第二层时就非常明了。如数字2,只要选择它下面较大值的结点19前进就可以了。所以实际求解时,可从底层开始,层层递进,最后得到最大值。结论:自顶向下的分析,自底向上的计算。考虑一下:2022/7/278二、经典问题:最长有序子序列I012345678NumI1472583692022/7/279解决方案:I012345678NumI147258369FI123

3、2343452022/7/2710思考 1160 FatMouses Speed Sample Input6008 1300 6000 2100 500 2000 1000 4000 1100 3000 6000 2000 8000 1400 6000 1200 2000 1900 Sample Output4 4 5 9 72022/7/2711再思考(1087)Super Jumping! Jumping!Juping! 2022/7/2712解题思路?2022/7/2713三、经典问题:最长公共子序列HDOJ-1159:Sample Inputabcfbc abfcabprogrammi

4、ng contest abcd mnp Sample Output 4 2 02022/7/2714abcfbca111111b122222f122333c123334a123334b123344辅助空间变化示意图2022/7/2715f(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)就得到所要求的解了.f(i-1,j-1)+1 (ai=bj)max(f(i-1,j),f(i,j-1

5、) (ai!=bj) 子结构特征:2022/7/2716四、经典问题:1421 搬寝室Sample Input 2 1 1 3Sample Output 42022/7/2717搬寝室是很累的,xhd深有体会.时间追述2019年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物 品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2*k件过去就行了.但还是会很累,因为2*k也不小是一个不 大于n的整数.幸运的是xhd根据多年的搬东西的经验发现每搬一次的疲劳度是和左右手的物品的重量差的平方成正比(这里补充一句,xhd每次搬

6、两件东西, 左手一件右手一件).例如xhd左手拿重量为3的物品,右手拿重量为6的物品,则他搬完这次的疲劳度为(6-3)2 = 9.现在可怜的xhd希望知道搬完这2*k件物品后的最佳状态是怎样的(也就是最低的疲劳度),请告诉他吧. 2022/7/2718第一感觉:根据题目的要求,每次提的两个物品重量差越小越好,是不是每次提的物品一定是重量相邻的物品呢?证明:假设四个从小到大的数:a、b、c、d,只需证明以下表达式成立即可:(a-b)2+(c-d)2 (a-c)2+(b-d)2(a-b)2+(c-d)2=2k)n个物品选二对,2022/7/2722f(i,j) 表示前j个取i对最小的疲劳度f(i,

7、j) = min(f(i,j-1), f(i-1,j-2)+(item(j)-item(j-1)2 )2022/7/2723五、经典问题:1058 Humble NumbersProblem Description A number whose only prime factors are 2,3,5 or 7 is called a humble number. The sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, . shows the first 20 humble numb

8、ers. Write a program to find and print the nth element in this sequence 2022/7/2724算法分析:典型的DP!1 -?1 -2=min(1*2,1*3,1*5,1*7)1 -2 -3=min(2*2,1*3,1*5,1*7)1 -2 -3 - 4 = min(2*2,2*3,1*5,1*7)1 -2 -3 - 4 -5= min(3*2,2*3,1*5,1*7)2022/7/2725状态转移方程?F(n)=min(F(i)*2,F(j)*3,F(k)*5,F(m)*7)(ni,j,k,m)特别的:i,j,k,m 只有在本项被选中后才移动2022/7/2726关键问题:这个题目的哪些经验值得我们借鉴?2022/7/2727思考:免费馅饼 2022/7/2728如何解决?请发表见解 2022/7/2729如果各个子问题不是独立的,不同的子问题的个数只是多项式量级,如果我们能够保存已经解决的子问题的答案,而在需要的时候再找出已求得的答案,这样就可以避免大量的重复计算。由此而来的基本思

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论