二叉苹果树是典型的树上依赖性背包,限制条件很严格
这是一个二叉苹果树:
我们用
dp[i][j]
表示以i
为根节点保留j
条边,我们可以得到动态转移方程dp[u][i]=max(dp[u][i],dp[u][i-j]+dp[v][j])
,u
表示根节点,v
代表子节点,动态转移方程表示,以u节点保留i条边的最大权值=max(以u为节点取i-j条边的最大权值+以v节点取j条边的最大权值,dp[u][i])
,而且注意根节点除1
外其余根节点不能保留0
条边。如果,以某个点为根取0条边,之后的子节点就可以不用取了,所以不可以取0
条边。所以写的时候需要限制条件。
AC代码: