初学树型dp
树型DP DFS的回溯 是树形DP的重点以及核心, 当回溯结束后,root的子树已经被遍历完并处理完了。 这便是树形DP的最重要的特点 自己认为应该注意的点 好多人都说在更新当前节点时,它的儿子结点都给更新完了,实际上这并不准确。对于当前节点,我们需要dfs它的儿子,并且在dfs中进行dp。在此过程中并不是等到儿子都更新完我们才更新当前节点的信息(假设当前节点为x, 有儿子son1 , son2, son3, 且son1已经更新完了, 即x已有了son1的信息, son2刚刚更新完,即dfs正在son2的位置回溯), 我们拿着son2, x和son1的信息再次更新x, 如此,x才有了son1,son2的综合信息,之后再从son3 dfs进去找son3的信息,最后才得到x的信息。 需要注意枚举的顺序,树型dp有点像01背包,而01背包更新信息时你如果没有记录对于i,i中前j个的状态,你就需要倒序枚举,而树型dp中通常直接用f[x] [...]...表示x所在子树的信息,这里枚举k的时候就需要像01背包一样了,从size[x]逆序枚举。 ( 01背包倒着写时要倒序 , 不然就表示 可以 多次使用前面的物品 更新后面的物品的状态(比如你顺着写,你 第j个物品用到了前j个物品来更新 ,那 当你再用第j个物品更新第j+1个物品 时, 又把前面的算了一遍 ,所以就算重复了)