Dynamic Programming - tree dependent backpack

    树形依赖背包是子树依赖父亲才能产生贡献的一类问题。
    有三种种解决的办法:
        1.强制选择当前节点,用当前的状态去更新子树信息,然后再用子树信息更新父亲。
        2.对于这一类问题,只有选择了父亲节点,才能选择子树。所以我们用dfs序来进行dp,对于子树,再dfs序上是连续的一段,可以考虑前i个dfs序带来的最大收益,正常的背包即可,稍微注意整个子树都不选的更新即可。
        3.第三种解决方法比较巧妙,将多叉树转为了二叉树。对于正常的树而言,我们的左右儿子都是儿子节点,但是在转化中,我们将当前节点的左儿子设置为它的任意一个儿子,将它的右儿子连接为与它所有深度相同的节点。这样对于选择当前节点就可以沿着左儿子走,否则只能沿着右儿子走,二维DP即可。
Published 51 original articles · won praise 6 · views 20000 +

Guess you like

Origin blog.csdn.net/qq_35776579/article/details/76695399