胡乱分析
实际上树形dp就是在树上进行的dp,这个题类似于01背包的一种dp的感觉,也是树形dp的模板题第一题。状态转移是从下到上的所以是回溯的时候进行的dp
转移方程
dp[p][j]=max(dp[p][j],dp[p][j-k-1]+dp[to][k]+w)
其中dp[i][j]代表i节点包含j条边所具有的最大权值和那么显然最终答案就是dp[1][q]
为什么是j-k-1因为要保证节点之间相互连接,剩下的就是从下向上dp了
还有就是dfs函数计算的是当前节点下有多少的边,dp的时候不能分的边比原本包含的边要多吧
代码
1 |
|
尝试后发现不加dfs也是对的
1 |
|