5.4 CW 模拟赛 T1. 神灵庙
思路
其中每个点由 \(\{\)出现次数, 权值\(\}\) 组成
不难发现最终的二叉树形式取决于每个点是否下放子节点
直接按照层数考虑完蛋了
按照深度考虑还行
设 \(f_{d, x, y, i}\) 表示当前深度为 \(d\), 深度 \(d\) 的点数为 \(x\), 深度 \(d + 1\) 的点数为 \(y\), 已经放了大小前 \(i\) 大的最小花费
不难发现最小花费这个东西约束了这么多是贪的
考虑转移
\[ \begin{align*}
\begin{cases}
f_{d, x, y, i} \to f_{d + 1, y, x + y, i} & (1)\\
f_{d, x, y, i} \to f_{d, x - 1, y - 1, i + 1} + a_{i + 1} \times d & (2) \\
\end{cases}
\end{align*} \]
用了一下类似无限背包的优化
复杂度 \(O(n^4)\)
考虑优化
注意到一个层次做的决策在后面的贡献一定, 考虑直接提前计算
于是可以把 \(d\) 省掉
复杂度 \(O(n^3)\)
本质上是在这个题中, 花费分到每一层是一个前缀
总结
首先注意到叶子结点深度一定, 显然 \(a_i\) 越大放的越低越好
于是考虑处理每个深度放多少 \(a_i\)
这类系数数组问题, 倘若我们按照系数逐步加 \(1\) 进行维护, 可以把最后的花费拆成一步一步的


浙公网安备 33010602011771号