ARC156E Non-Adjacent Matching 解题记录

经过一定简单的转化,相当于要求解以下的问题:

计数长度为 \(N\) 的序列 \(A\) 个数,满足:

  1. \(A_i \in [0,M]\)
  2. \(\sum A_i \le K\)
  3. \(\forall_i\ A_i + A_{i+1} \le \dfrac{\sum A_j}{2}\)
  4. \(2 | \sum A_i\)

\(4 \le N \le 3000, 0 \le M \le 3000, 0 \le K \le NM\)


对第三个条件容斥,首先考虑只有条件一二四的情况,可以简单背包,复杂度 \(O(nK)\)

更加优秀的做法是,写出生成函数形式计算:

\[F(N,M,K,0)=[x^{T}]\dfrac{(1-x^{M+1})^n}{(1-x)^n(1-x^2)}\\ = \sum_{i=0}^n \binom{n}{i}(-1)^i\sum_{j=0}^{T-i(M+1)} \binom{n+j-1}{j} [T-i(M+1)-j 是偶数] \]

我们用 \(F(N,M,K)\) 来表示只满足条件一二四的序列个数。

考虑第三个限制,先钦定 \(A_1+A_2 > \dfrac{\sum A_j}{2}\)

直接枚举 \(A_1 + A_2\),答案是:

\[\sum_{S=0}^{2M} w_S\times F(N-2,M,\min(S-1,K-S),S\&1) \]

\(F\) 最后的一个变量表示奇偶性。)

其中 \(w_S\) 是将 \(S\) 劈成两半满足都不超过 \(M\) 的方案数。

再加上 \(A_1 + A_2, A_2 + A_3\) 均超过一半的情况。

\[\sum_{S_0=0}^{3M} \sum_{S_1=0}^{S_0} w_{S_0,S_1}\times F(N-3,M,\min(S_1 -1,K- S_0),S_0 \& 1) \]

\(w_{S_0,S_1}\) 表示将 \(S_0\) 分成三个部分 \(A_1,A_2,A_3\),满足以下条件的方案数:

  1. \(\min(A_1,A_3)+A_2-\max(A_1,A_3) = S_1\)
  2. \(A_1+A_2+A_3 = S_0\)

通过一些简单的预处理,即可在 \(O(N^2)\) 的时间内解决此问题。

posted @ 2023-02-25 16:12  一般通过小萌新  阅读(49)  评论(0编辑  收藏  举报