tree-dp理解与运用.docVIP

  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文档。上传文档
查看更多
tree-dp理解与运用

树型动态规划讲解 树型动态规划是动态规划中的一种比较特殊的种类,他的特殊,在于这种动态规划在树这种数据结构上。所以这种动态规划就结合了树的特点。使用递归方式解答。状态总是通过每层来划分的,并且从也节点到根的方向进行状态转移(反过来也可,但不简便)。 树再这里有两种分类,一种是有根树,一种是无根树。 在一棵树中,一旦根确定,就意味着这颗树的结构也就确定了。所以有根树比无根树相对简单一些。 无根树分为两种情况,依题目而异。有些题目中,答案是和树的形态没有关系的,此时我们只需要随机选取一个节点作为根建树即可。还有些题目,答案和树的形态有关系,此时我们必须要枚举每个节点作为跟的情况进行建树,求解,才可以得到答案。 Ural 1018?二苹果树) 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1。 4个树枝的树 2?? 5 ????\ / ???? 3?? 4 ??????\ / ?????? 1 现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。 给定需要保留的树枝数量,求出最多能留住多少苹果。 输入格式 第1行2个数,N和Q(1=Q= N,1N=100)。 N表示树的结点数,Q表示要保留的树枝数量。接下来N-1行描述树枝的信息。 3个整数,前两个是它连接的结点的编号。第3个数是这根树枝上苹果的数量。 30000个。 一个数,最多能留住的苹果的数量。 样例输入 5 2 1 3 1 1 4 10 2 3 20 3 5 20 样例输出 21 题目地址:http://acm.timus.ru/submit.aspx?space=1num=1039 解析:因为题目一给出就是二叉的,所以很容易就可以写出方程: a(I,j):=max(a(i.left,k)+a(i.right,j-k)),0=k=j 方程的意思可以理解为第I个节点为根的子树中选j个枝条可以获得的最大值 因为所转移的状态有左子树,和右子树两个部分,所以转移的时候枚举两个子树提供的树枝个数即可。 program ural1018; const maxn=100; var v1,v2:array[1..maxn]of byte; apple:array[1..maxn]of word; dp:array[1..maxn,0..maxn]of longint; v:array[1..maxn]of boolean; n,q,i:byte; procedure dfs(x:byte); var i,j,c1,c2:byte; t:longint; begin v[x]:=true;c1:=0;c2:=0; for i:=1 to n do if (v1[i]=x) or (v2[i]=x) then begin t:=v1[i]+v2[i]-x; if v[t] then dp[x,1]:=apple[i] else begin if c1=0 then c1:=t else c2:=t; dfs(t); end; end; if c10 then for i:=1 to q do for j:=0 to i-1 do begin t:=dp[x,1]+dp[c1,j]+dp[c2,i-1-j]; if tdp[x,i] then dp[x,i]:=t; end; end; begin read(n,q);inc(q); for i:=1 to n-1 do read(v1[i],v2[i],apple[i]); dfs(1); writeln(dp[1,q]); end. Ural 1039 没有上司的晚会 (普通树,有根树DP) 背景 有个公司要举行一场晚会。 为了能玩得开心,公司领导决定:如果邀请了某个人,那么一定不会邀请他的上司 (上司的上司,上司的上司的上司……都可以邀请)。 题目 每个参加晚会的人都能为晚会增添一些气氛,求一个邀请方案,使气氛值的和最大。 输入格式 第1行一个整数N(1=N=6000)表示公司的人数。 接下来N行每行一个整数。第i行的数表示第i个人的气氛值x(-128=x=127)。 接下来每行两个整数L,K。表示第K个人是第L个人的上司。 输入以0 0结束。 输出格式 一个数,最大的气氛值和。 样例输入 7 1 1 1 1 1 1

文档评论(0)

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

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

1亿VIP精品文档

相关文档