P2015 二叉苹果树(有依赖的树形dp)

这道题目涉及一棵二叉苹果树,要求在保留一定数量树枝的前提下,最大化保留的苹果总数。通过树形动态规划(DP)解决此问题,其中状态f[u][k]表示以节点u为根,选择k条边的最大苹果数。动态转移方程为f[u][j]=max(f[u][j],f[u][j−1−k],f[v][k]+w),其中u是父节点,v是子节点,j表示总边数,k表示子树边数,w是边权。解决方案可使用邻接矩阵或邻接表实现。" 125651951,5690651,Vue响应式原理与双向数据绑定解析,"['vue.js', '前端', 'javascript']
摘要由CSDN通过智能技术生成

题目描述
有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点)
这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1。
我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有4个树枝的树

2   5
 \ / 
  3   4
   \ /
    1

现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。
给定需要保留的树枝数量,求出最多能留住多少苹果。

输入格式
第1行2个数,N和Q(1<=Q<= N,1<N<=100)。
N表示树的结点数,Q表示要保留的树枝数量。接下来N-1行描述树枝的信息。
每行3个整数,前两个是它连接的结点的编号。第3个数是这根树枝上苹果的数量。
每根树枝上的苹果不超过30000个。

输出格式
一个数,最多能留住的苹果的数量。

输入输出样例
输入

5 2
1 3 1
1 4 10
2 3 20
3 5 20

输出

21

算法(树形dp)

这道题要求一棵树留Q条边,那是不是可以分为子树有K条边,根与子树有Q-j-1(为什么要减一,后面会讲到),这正好符合树形dp父子节点与儿子节点有依赖关系,所以我们选择树形dp。

思路:
f [ u ] [ k ] f[u][k] f[u][k]表示选已u作为根节点的子树选k条边的最多苹果数量。再根据上面讲的依赖关系,我们可以列出动态转移方程:
f [ u ] [ j ] = m a x ( f [ u ] [ j ] , f [ u ] [ j − 1 − k ] , f [ v ]

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值