2025.1.24
树上背包
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。
缺点是空间复杂度没在压了。
P
本文来自博客园,作者:5k_sync_closer,转载请注明原文链接:https://www.cnblogs.com/xrlong/p/18688964
版权声明:本作品采用 「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0) 进行许可。