树形动态规划.pptVIP

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

树型动态规划 引言 树是一种特殊的图,可以描述比较复杂的关系,而大多数动归都是在一维二维这种规则的背景下的,再加上树递归定义的性质,可以说是一种非常合适的动归框架,树型动态规划就成为动规中重要的一类题型。 因为树可以描述比较复杂的关系,这对选手分析问题的能力有较高的要求,在寻找最优子结构、组织状态时往往需要创造性思维,而且树型动态规划对数学要求不高,一般不涉及单调性优化,所以竞赛中往往将它作为侧重考察选手分析思考能力的题出现。 例一、问题描述 给定一棵树,树的每个节点有一个权值,要求从中选出一些不相邻的点,使选出的节点权值和最大。 例一、确定状态 对于大多数树型动态规划问题,都是用一棵子树的根节点编号来作为代表这棵子树的第一维状态,然后再根据需要加维。 对于本题:用f[i][0]表示不选i时,以i为根子树的最大权值;用f[i][1]表示选择i时,以i为根子树的最大值。 例一、状态转移 f[i][0]=sum(max(f[j][0],f[j][1])) f[i][1]=sum(f[j][0]) 例一、状态转移 因为树的特殊结构,任何两个点只有唯一通路,所以很容易满足无后效性。 假如本题给定的是图而不是树,那么显然就无法用动归解决了。 例一、两种实现方式 记忆划搜索:易于实现,但可能会爆栈 拓扑排序+动归:实现起来比较麻烦 例一、两种实现方式 实现方式的选择因题而异,对于本题,首先要保证程序不会出错。但一般来说,在保证正确的前提下,记忆划搜索更加易于实现,且在对于复杂的题目,记忆划搜索更加直观,便于思考。 例二、问题描述 在一棵节点数不超过200000的树中,每条边都有一个长度值,现要求在树中选择3个点X、Y、Z,满足X到Y的距离不大于X到Z的距离,且X到Y的距离与Y到Z的距离之和最大,求这个最大值。 例二、问题分析 三种情况 例二、问题分析 |XY|+|YZ| 例二、问题分析 例二、问题分析 现在只要考虑这一种情况 要满足|Xa|+|aY|≦ |Xa|+|aZ| |Xa|+2|aY|+|aZ|最大 例二、问题分析 现在我们考虑分叉点a 很明显,要使目标值最大,XYZ必是离a最远的三点,且在以a为根的三棵不同子树中。Y就是三点中离a第二远的点。 显然,三个点要么位于以a为根的子树中,要么位于以a为根的子树外。 例二、问题分析 求在子树中的三个最远点,方法很简单。在儿子已经算好的情况下,父节点只要保留其中最远点最远的三个儿子的最远点即可。 子树外的最远点如何求? 例二、问题分析 把这棵树再遍历一遍,进行一次BFS,深度小的先访问,深度大的后访问,就保证了访问到某一个节点的时候,其父亲节点已经被访问过了。此次遍历时,对于点a,检查其父亲节点,只需求出到其父亲节点的最远的,且不在以a为根的子树中的那点即可 。 例三、问题描述 有一棵苹果树,如果树枝有分叉,一定是分 2 叉(就是说没有只有 1 个儿子的结点)。 这棵树共有 N(1=N=100) 个结点(叶子点或者树枝分叉点),编号为 1-N, 树根编号一定是 1。 现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。 给定需要保留的树枝数量P,求出最多能留住多少苹果。 例三、问题分析 这题的权值在边上,这在思考时有些别扭,其实只要把边的权值转移到儿子节点上,问题性质不变。 这样状态就应该容易想到了,f[i][j]表示以i节点为根的子树保留j个节点所得的最大值。因为根节点没有权值,所以我们要保留p+1个点。 例三、状态转移 f[i][j]=max{f[i_left][k]+f[i_right][j-1-k]} (0=k=j-1) 边界 f[i][0]=0;f[i][1]=value[i] 最后f[1][p+1]就是答案 例四、问题描述 学校开设了 N(N300)门的选修课程,每个学生可选课程的数量 M 是给定的。学生选修了这 M 门课并考核通过就能获得相应的学分。 在选修课程中,有些课程可以直接选修,有些课程有一门直接的先修课。 你的任务是为自己确定一个选课方案,使得你能得到的学分最多,并且必须满足先修课优先的原则。假定课程之间不存在时间上的冲突。 例四、问题分析 由于每门课至多只有一门直接先修课,我们把没有先修课的课强制规定一门空的先修课,这样所有课就构成了一棵树。 现在就是要从中选出m+1门课,被选择的课必须满足其所有祖先都被选择。 例四、问题分析 这样看来这题和上题差不多:从根开始,把m+1个机会分配下去。状态也很容易想到,f[i][k]表示以i为根的子树中选k门课的最大学分。 但是这题的树不是二叉的,这就不能用上题的方法分配附加维了。 例四、问题分析 假设某个节点的所有孩子的状态值都已经计算出来了,现在

文档评论(0)

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

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

1亿VIP精品文档

相关文档