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)\).

浙公网安备 33010602011771号