比赛的时候瞎搞了个做法,过了,就写篇题解吧。
枚举第 \(r\) 个点的权值,所求即为:\((\prod_{i < r} \frac{1}{1-x^{i}}) \sum_{i} \frac{x^{ir}}{\prod_{j \le i} (1-x^{j})^2}\)
问题的关键就在算 \(\sum_{i} \frac{x^{ir}}{\prod_{j \le i} (1-x^{j})^2}\)。
考虑根号分治。
- 对于 \(i \le B\),我们暴力背包,时间复杂度 \(\Theta(nB)\)。
- 对于 \(i > B\),容易发现取 \(j > B\) 的元素一定不超过 \(\frac{n}{B}\) 个。那么我们设计 \(\rm DP\):\(dp_{i,j}\) 表示现在取了 \(i\) 个元素,和为 \(j\) 的方案数是多少。转移就是把当前所有元素的权值 \(+1\),并选择若干个 \(0\)。如果选择了 \(t\) 个 \(0\),那么方案数是 \(t+1\)。可以通过类似前缀和优化的东西做到 \(\Theta(\frac{n^2}{B})\)。由于这题空间限制比较小,需要滚动数组。
取 \(B = \sqrt{n}\),我们得到了一个 \(\Theta(n \sqrt {n})\) 的做法。