CF1943D2 Counting Is Fun (Hard Version)
对于这种区间操作类的题目其实是不太擅长的。
首先先差分,发现就是对一个位置减 \(1\),后面一个位置加 \(1\),发现不能给相邻位置加,所以如果一个数的值大于其相邻两数之和,那么无解。
有了这个其实 Easy version 就很好做了,设 \(f_{i, j, k}\) 为到 \(i\),\(a_i = j, a_{i - 1} = k\) 的方案数,容易用前后缀和优化至 \(O(n^3)\)。
但是 Hard version 就不是很简单了,我们发现 DP 状态都爆了,考虑优化 DP 状态,发现一个关键性质:
- 不可能有相邻两个 \(i\) 都大于相邻两数之和。
考虑容斥,容斥有 \(j\) 个位置不满足条件,发现将容斥的每一项拆开记入 DP 状态,令 \(f_{i, j}\) 到 \(i\) 且 \(a_i = j\) 时所有容斥系数乘上贡献和,容易前缀和优化到 \(O(n^2)\),由于这个性质,DP 是不会需要记两个位置值的。

浙公网安备 33010602011771号