这道题我一开始也是不会,后来看了题解,是分组背包dp问题,然后明白了,下面就说一说思路:(题意自己看吧)
用d(i,j,k)表示以j作为根节点的子树,在前i个子节点中选择k个节点所得到的最大收益,显然这样的定义是将问题转化了,
满足d(i,j,k)>=0最后就能够考虑(j==1,也就是说是最初的大根),然而其他情况即使<我们也需要考虑(可能与另外的i+x节点组成的数
就>=0了,然后就是状态转移方程:d(i,j,k) = max(d(i-1,j,k), d(i-1,j,k-...)+d(.., v(子节点), ....)这个状态转移方程定义的很玄学,反正大家看 看这个题解就是了https://www.luogu.org/problemnew/solution/P1273(写的比我好),代码省略(我怎么这么懒。)