- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二次动规 在动规的基础上再进行动规,就叫做二次动规。 买票 有一座n层的楼房,某个人要到第n层的任何一个房间买票。每层楼都有m个房间。而如果要到第i层的第j个房间买票,那么必须先在第i-1层的第j个房间买票或者在第i层的与这个房间相邻的房间买过票才行.而每个房间所要收取的票费是不同的,给定每个房间内买票需要的费用,问要在第n层的任意一间房间内买到票的最小消费是多少. 买票 显然不能写这样的状态转移方程:f[i,j]:=min(f[i-1,j],f[i,j-1],f[i,j+1])+w[j].因为无法有一种处理顺序使得在f[i,j]之前同时求得f[i,j-1]和f[i,j+1]的最优值. 所以动规分两次进行.第一次用状态转移方程f[i,j]:=min(f[i,j-1],f[i-1,j])+w[i]求出一个不一定是最优的解.再用f[i,j]:=min(f[i,j],f[i,j+1],j from m-1 downto 1)+w[i]求出最终的最优解,可以证明这样的能够求出真正的最优解. 要注意的是这两次动规不能分开做,而要在处理每一层的时候都要做,要不然显然无法求得最优值。 综合题 网络(Ural1056,求树的中心) 题目大意是:有一棵有N个结点的树,给出每个结点的父亲(即给出这棵树),边的权都是1。每个结点延树的边可以走到树的任意一个结点,令Ai为第i个结点最远能走的距离,求出Ai最小的结点有哪些。如有多个最小的Ai,则都要输出。这里N=10000 网络 枚举每个点,然后DFS复杂度O(N2),超时是显然的事情。 可以发现其实有很多DFS都重复做了同样的工作,产生了浪费,所以应该选择动态规划解决这个问题。 树上的动规,是否直接可以写出下面的状态转移方城呢? f[i]:=max(f[son],f[father])+1 废话,显然是不行的,son和father的值不可能同时得到。 但是不要放弃,解决这个冲突的方法,就是采用二次动规。 网络 第一次动规做f[i]:=max(f[son])+1,第二次动规做f[i]:=max(f[i],f[father] + 1) 。 但是存在一个问题就是如果f[father]的值是从i那里得到的,这样计算显然就错了。 不要放弃,在实际操作过程中,f需要记下两个值,一个是最优值,一个是次优值,这两个值必须由不用的子结点得到。这样当最优值发生矛盾的时候,次优值一定不会矛盾。问题就解决了。复杂度O(N)十分的理想。 总结 动态规划有很多东西还需要我们更加努力地去探索和学习.总体上说来,动态规划是个既简单又不简单的算法,熟练地掌握了动态规划,也就熟练地控制了比赛. That’s all! Thank you for listening. 动规练习题 垃圾陷阱(USACOTJU1087) 卡门——农夫约翰极其珍视的一条Holsteins奶牛——已经落了到“垃圾井”中。“垃圾井”是农夫们扔垃圾的地方,它的深度为D (2 = D = 100)英尺。卡门想把垃圾堆起来,等到堆得与井同样高时,她就能逃出井外了。另外,卡门可以通过吃一些垃圾来维持自己的生命。每个垃圾都可以用来吃或堆放,并且堆放垃圾不用花费卡门的时间。假设卡门预先知道了每个垃圾扔下的时间t(0 t = 1000),以及每个垃圾堆放的高度h(1 = h = 25)和吃进该垃圾能维持生命的时间f(1 = f = 30),要求出卡门最早能逃出井外的时间,假设卡门当前体内有足够持续10小时的能量,如果卡门10小时内没有进食,卡门就将饿死。 动规练习题 字符串距离(TJU1086) 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为“abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X的扩展串,这里“□”代表空格字符。 如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么我们定义字符串A1与B1的距离为相应位置上的字符的距离总和,而两个非空格字符的距离定义为它们的ASCII码的差的绝对值,而空格字符与其它任意字符之间的距离为已知的定值K,空格字符与空格字符的距离为O。在字符串A、B的所有扩展串中,必定存在两个等长的扩展串A1、B1,使得A1与B1之间的距离达到最小,我们将这一距离定义为字符串A、B的距离。 请你写一个程序,求出字符串A、B的距离。 动规练习题 二叉苹果树(Ural1018) 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点)这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1。我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有4个树枝的树?2? ? 5
原创力文档


文档评论(0)