进阶算法——树形DP

特点(特别之处)

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)

 

猜你喜欢

转载自www.cnblogs.com/Uninstalllingyi/p/11434166.html
今日推荐