Loading

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 是不会需要记两个位置值的。

posted @ 2025-08-15 14:47  Alexande  阅读(14)  评论(0)    收藏  举报