特点(特别之处)
DP这种东西…跟玄学一样…除非讲题,不然是真的没啥东西总结…
通过少量局部不完全不具代表性的刷题得出…
树形DP一般是在递归环境进行的,并且是先递到底
树形DP的第一维状态往往是以i为节点的子树。
题目中的ShowTime
因为动态规划的恐怖之处…所以还是多通过题目感受吧…
选课
首先很容易看出来,这题的数据是二叉树。
对于某一个非根节点来说,如果你想选择这个节点,那么就必须选择他的父节点。
那么对于一个节点,如果左儿子选了y个节点,右儿子就一定是要选y-1-k个节点(因为父节点要选,需要扣除一个节点位)
这样就可以推出状态,F[x][y]表示以x为根节点的子树,选择y个节点的最大值
那么就可以得到方程
F[x][y]=max(f[left[x][k]+f[right[x]]][y-1-k]+v[x])
枚举每个节点的左右儿子,循环k的值即可(0——y-1)