树上背包
DESTRUCTION 3,2,1
09 年论文现在才学也是没救了。
对于重量为 \(1\) 的,直接每次枚举 size 就可以做到 \(n^2\),证明考虑一个点对只会在 lca 出有一个贡献。
考虑重量是 \(v_i\),定义 \(v_i\) 的上界是 \(V\)。
暴力做是 \(nV^2\) 的,实在是不优美。
考虑更改更新顺序为从顶到底可以做到 \(nV\),具体实现有两种。
考虑推到 dfs 序上,设 \(dp_{i,j}\) 表示当前到 \(i\) 点,重量是 \(j\),转移考虑刷表,枚举这个点选不选考虑贡献到 \(i + 1\) 或者 \(i + sz\)(这个点不选不能选子树)。
也可以不用 dfs 序,考虑依次做每个儿子,最后和自己取 max。
缺点是空间复杂度没在压了。