- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DP-1
动态规划入门 By PerfectCai 首先介绍一下动态规划: 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。 动态规划首次进入信息学奥赛是在IOI94(数字三角形),在国内首次出现是在NOI95。此后动态规划成为信息学奥赛的必考算法之一。 根据我个人经验直面问题是入门的一个很不错的途径,下面就来看一下这个绝对经典的问题——数字三角形(HOJ1058): 给你一个数字三角形, 形式如下 1 2 3 4 5 6 7 8 9 10 找出从第一层到最后一层的一条路,使得所经过的权值之和最大. 例如: 1 1 2 3 2 3 4 5 6 4 5 6 7 8 9 10 7 8 9 10 1-3-5-9和1-2-4-8就是两条路。 通常的思路是枚举,就是把所有的路都试一遍,得到其中和最大的一条,对于有n层的三角形,路的总数是2^(n-1),也就是说如果有1000层,那么要枚举10的301次幂条路,这个效率再好的计算机也没戏。 下面说一下如何用动态规划的思想来解决: 首先,对于某一层而言,它两边的两个位置只能经过上一层的唯一一个位置到达(例如4只能经过2到达),其余中间的均可经过上一层的两个位置到达(左上和右上,例如8可以经过4或5到达),假如说我现在已知了到上一层各个位置为终点的最大值,那么我就可以根据上一层的这些最大值得到这一层的最大值, 例如: 已知第二层求第三层: 到2的最大值为3,到3的最大值为4?到4的最大值为3+4,到5的最大值为max(3+5, 4+5),到6的最大值为4+6。 这样就可以求出到第3层各位置的最大值分别为7,9,10. 根据这个方法一层一层的向下推,每次都得到到某一层的每个位置的最优,并且用这层的信息去求下一层的最优,这就是一种动态规划的思想。对于有n层的三角形,只需计算n^2/2各位置,总计n^2/2次,对于1000层的三角形需计算500000次,计算机可以瞬秒之。 希望大家把HOJ上的这道题A掉,并且理解体会一下 每个人对动态规划都有自己的理解,比如理解成一种递推,记忆化搜索,而我对动态规划的理解是部分枚举。 有上面的例题可以看出完全枚举需要的枚举次数过多,但其实对于每一个位置我只举出它左上和右上的最优进行比较即可,并不需要全部枚举,在这里有一种贪心的思想,即一个点的最优只能由它的左上最优加上它的值,或它的右上最优加上它的值得到。在这里我只枚举了关键的几个,所以是部分枚举。 最后再简单讲解一下HOJ 2014 思路:对于长度为n的,分类讨论一下: 1.如果让最后一个是竖着放的1*2,那么种类数就和长为n-1的种类数一样; 2.如果最后一个是横着放的1*2,那么它下面也只能横着放1*2,就是两个横着放的填充了后两个单位长度,这时种类数就和长为n-2的种类数一样。 3.如果最后一个是2*2,这时种类数就和长为n-2的种类数一样。 我们设长为n的种类数为f[n],那么有: f[1] = 1; f[2] = 3; f[n] = f[n-1] + 2*f[n-2] (n2) 所以f[3] = 5; f[4]=11; f[5]=21; f[6]=43; f[7]=85; f[8]=171; 即例子中的171 当然这个递推可以通过数学化简: 当n为奇数时,f[n] = 2*f[n-1] – 1; 当n为偶数时,f[n] = 2*f[n-1] + 1; 这里还有两个重要概念:初始值和状态转移方程 f[1] = 1; f[2] = 3; ——初值 f[n] = f[n-1] + 2*f[n-2] (n2) ——状态转移方程 对于一个问题,把初值用状态转移方程进行拓展就可以得到所要结果。 当然HOJ 2014需要用高精度算法,还有两个题和它类似: HOJ 2124 HOJ 2894(你们校赛题)
您可能关注的文档
- CATIAch06-3(修改)机械设计命令详解.doc
- CATIA V5快速曲面重建.ppt
- catia-草绘.pdf
- CATIA-V5R20安装步骤.docx
- CATIA_V5R20教程.ppt
- CATIAV5基础教程.pdf
- CATIA-V5R20安装图解.doc
- CATIA_V5教程-第1章__Catia_V5_R18使用概述06820.ppt
- CATIA_V5安装指导手册.pdf
- CATIA_培训.ppt
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)