树形dp之个人整理总结.docVIP

  • 12
  • 0
  • 约 42页
  • 2017-09-24 发布于河南
  • 举报
树形DP 二叉苹果树(ural 1108) 题目意思: 有一棵苹果树,苹果树的是一棵二叉树,共N个节点,树节点编号为1~N,编号为1的节点为树根,边可理解为树的分枝,每个分支都长着若干个苹果,现在要要求减去若干个分支,保留M个分支,要求这M个分支的苹果数量最多。 输入: N M 接下来的N-1行是树的边,和该边的苹果数N and M (1 ≤ M N; 1 N ≤ 100) 输出: 剩余苹果的最大数量。 input 5 2 1 3 1 1 4 10 2 3 20 3 5 20 output 21 算法: 删除了某个分支,那么这个分支下的子分支也同时删除。 保留M个分支,也就是删除N-M-1个分支。剩余的最多苹果数=总苹果数-剪掉的苹果数。 注意本题给的边并没有按照树根--树叶的形式来给,也没有按照树的顺序给出边。本来想一个节点对应一个分支长着的苹果数量,cost[v]就表示v这个节点的苹果数,可以这样做,但是在输入的时候,不知道这个苹果数量是那个节点的,因为不知道哪个是哪个的子结点。所以用了无向图和苹果数加到边上去。 我的解法中:这题的树状DP的整体思想个pku3345是一样的。 有一些不一样的地方要注意一下: 本程序其实不仅仅针对二叉树,可以是任意的树,删除任意个分支都有算。 #includeiostream #includevector #includelimits us

文档评论(0)

1亿VIP精品文档

相关文档