传送门:P8352 [SDOI/SXOI2022] 小 N 的独立集
题目大意:给定一棵 n n n 个点的树,每个点的权值在 1 ∼ k 1\sim k 1∼k 之间,问有多少种权值的方案使得整棵树的最大权独立集大小为 m m m ,对 m = 1 ∼ n k m=1\sim nk m=1∼nk 分别求解。
因为是全场最简单(果然以我的水平只能出得出来这种送分题了吗),废话不多说直接上题解。
我们都知道树上最大权独立集的求法: f [ x ] [ 0 / 1 ] f[x][0/1] f[x][0/1] 表示以 x x x 为根的子树,根是否被选择的答案。
而这里的问题是计数,因此需要dp套dp:设 g [ x ] [ p ] [ q ] g[x][p][q] g[x][p][q] 表示以 x x x 为根的子树, f [ x ] [ 0 ] = p f[x][0]=p f[x][0]=p , f [ x ] [ 1 ] = q f[x][1] =q f[x][1]=q 的方案数。
当然这样状态数直接爆炸了: p p p 和 q q q 都是 O ( n k ) O(nk) O(nk) 级别,状态数直接达到立方。我们先优化状态。
注意到最大权独立集的dp其实还有另一种写法: f [ x ] [ 0 / 1 ] f[x][0/1] f[x][0/1] 表示以 x x x 为根的子树, 根是否必须不选 的答案。容易观察到必然有 f [ x ] [ 1 ] ≤ f [ x ] [ 0 ] ≤ f [ x ] [ 1 ] + k f[x][1] \leq f[x][0] \leq f[x][1] + k f[x][1]≤f[x][0
[luogu8352] [SDOI2022 d2t1] 小N的独立集 - 计数 - dp套dp
最新推荐文章于 2022-08-06 15:08:47 发布
本文详细介绍了如何解决树上最大权独立集的计数问题,通过dp套dp的方法优化状态,将状态数从O(nk^2)降低到O(n^2k^2),并给出了转移方程,最终实现O(n^2k^4)的时间复杂度解决方案。文章适合对算法和数据结构有一定基础的读者,深入理解树上背包的应用。

最低0.47元/天 解锁文章
698

被折叠的 条评论
为什么被折叠?



