树形动态规划(信息学竞赛).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
树形动态规划(信息学竞赛)

树状动规 1333: VIJOS-P1180 选课 想要选修某个课程,那么它的先修课必须要被选择。 多叉树转二叉树动归。 首先大家先了解多叉树转二叉树。 原则:二叉树的结点x的左儿子为x的儿子,右儿子是x的兄弟。即左儿子,右兄弟原则。 1333: 选课 (多叉树转二叉树) 1333: VIJOS-P1180 选课 状态F(x,y):表示节点x取y门课得最高学分 方程F(x,y)=max{F(R[x],k) , F(L[x],k-1) + a[x] + F(R[x],y-k) } k=0,1,..y F(L[x],k-1)+a[x] :表示左孩子选了k-1门课及包括课程x,共k门课的最大学分。 F(R[x],y-k) 表示右孩子只能选y-k门课的最大得分。 分析出来了这么多,代码如何写才是关键,否则都是空中楼阁。 我们引入记忆化搜索的思想,即每深搜一步,把搜做到的结果保存起来,当下次搜索到同样的位置时,直接使用! 记忆化搜索经典题目:1911滑雪 1257 Function 2140: 通向自由的钥匙 通向自由的钥匙被放n个房间里,这n个房间由n-1条走廊连接。注意:这就是一棵树。 本题的动规的过程与上一题选课是一样的 唯一不同的是题目给出树的根为1,还有树的联通性。 建二叉树树的过程是需要大家仔细思考的。 2140: 通向自由的钥匙 1273: 加分二叉树 每一个结点有一个权值,给定的序列是中序遍历的点权序列。 状态f[i][j]表示从i到j的中序序列组成的二叉树最大加分值。 方程f[i][j]=max{ f[i][k-1] * f[k+1][j] + f[k][k] } i=k=j f[i][k-1] 和 f[k+1][j] 直接拿过来用肯能不会求出最大的f[i][j],所以要引入记忆化的思想,递归的求出这两个的值。 1273: 加分二叉树 POJ 2342 Anniversary party 题意:一个人不同他的直属上司一起参加舞会,问参会人员的权值和的最大值。 显然每个人只有两种状态参加或者不参加 状态f[i][0]表示第i个人不参加,f[i][1]表示此人参加,所的得到的子树的最大值。 f[i][1]+=f[j][0]; j是其下属的标号 f[i][0]+=max{ f[j][1],f[j][0] } 本题使用链式前向星存边,找出根root ans=max{ f[root][0], f[root][1]}; POJ 2342 Anniversary party POJ 3342 Party at Hali-Bula 基本题意与2342相同,需要特别判断与会名单是否唯一! 思考判定方法?是否有特例! 动规伴随着深搜,只需要考虑深搜时候的局部情况即可判定全局情况。 即if(f[x][0]==f[x][1] f[y][1]==f[y][0]) flag=0; 思考当n==2时,只能一个人与会,名单不确定。但是使用上面的判断就不行了,需要特判一下即可。 POJ 2486 Apple Tree N叉苹果树,结点上有苹果,问一共走k步,所能吃到的苹果的最大值。 其中从A-B 算一步,返回B-A再算一步。 状态f[0][i][j]表示从i点走j步再回到i的最大值 状态f[1][i][j]表示从i点走j步不回到i的最大值 f[0][x][j+2]=max{f[0][x][j+2],f[0][y][k]+f[0][x][j-k]} f[1][x][j+2]=max{f[1][x][j+2],f[0][y][k]+f[1][x][j-k]} f[1][x][j+1]=max{f[1][x][j+1],f[1][y][k]+f[0][x][j-k]} POJ 2486 Apple Tree POJ 3659 Cell Phone Network 题意:给出一棵树,树的每个节点都可以放信号塔,放信号塔的节点可以覆盖到它周围的节点,问选择最少的建信号塔的方案,使得树的所有节点都被覆盖。 这样的问题叫做:最小支配集问题,使用树形动归来处理。 考虑每个结点只有两种状态,放或者不放信号塔。其中如果这个点不放信号塔,并且还需要被覆盖,又有两种情况:一是其父亲结点放信号塔,二是其子节点中有一个放了信号塔。 总结起来每个结点有三种情况: f[x][0]:x点的父亲结点放塔,以x为根的子树最少信号塔数 f[x][1]:x点的子节点放塔,以x为根的子树的最少信号塔数 f[x][2]:x点本身放信号塔,以x为根的子树最少信号塔数 POJ 3659 Cell Phone Network 那么动态方程为:设y为x的子结点 f[x][0]+=min{ f[y][1] , f[y][2] } f[x][2]+=m

文档评论(0)

335415 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档