Description
有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点)
这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1。
我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有4个树枝的树
2 5
\ /
3 4
\ /
1
现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。
给定需要保留的树枝数量,求出最多能留住多少苹果。
Input
第1行2个数,N和Q(1<=Q<= N,1
Output
一个数,最多能留住的苹果的数量。
Sample Input
5 2
1 3 1
1 4 10
2 3 20
3 5 20
Sample Output
21
分析
解题思路
这是一道树形DP的板子题。
f[i][j]表示以i为根节点的子树,保留j条树枝时的,保留的最大苹果数。
(这道题有一个隐含的条件,当某条边被保留下来时,从根节点到这条边的路径上的所有边也都必须保留下来)那么状态转移方程为:
f [ d e p ] [ j ] = m a x ( f [ d e p ] [ j ] , f [ s o n ] [ k ] + f [ d e p ] [ j − k − 1 ] + a [ s o n ] [ d e p ] ) ; f[dep][j]=max(f[dep][j],f[son][k]+f[dep][j−k−1]+a[son][dep]);