luogu DP 题单做题记录

https://www.luogu.com.cn/training/1054622

[NOIP 2017 提高组] 宝藏

相当于求出一棵生成树,边权的贡献与深度有关.

可以设出如下 DP 状态:设 \(dp_{i,d,S}\) 表示根节点为 \(i\),根节点深度为 \(d\),树中节点集合为 \(S\).
转移是不难的,枚举 \(i\) 连接的边与 \(S\) 的子集即可做到 \(O(3^nnm)\).

事实上,我们其实并不需要记录根节点,设出如下 DP 状态:设 \(dp_{d,S}\) 表示树的深度为 \(d\),包含集合为 \(S\).
我们可以有如下转移:

\[dp_{i+1,S\cup T}=dp_{i,S}+\sum_{t\in T}i\times \min_{s\in S}\operatorname{dis}(t,s) \]

虽然上面的转移我们并没有判断每个节点的深度,表面上看会有一些答案不合法.
事实上,不合法的答案一定不是最优的答案,因此可以这样枚举.

通过预处理,转移是 \(O(n)\) 的,总时间复杂度为 \(O(3^nn^2)\).

posted @ 2026-08-17 17:21  Zhou_Lemon  阅读(10)  评论(0)    收藏  举报