ARC156E Non-Adjacent Matching 解题记录
经过一定简单的转化,相当于要求解以下的问题:
计数长度为 \(N\) 的序列 \(A\) 个数,满足:
- \(A_i \in [0,M]\)
- \(\sum A_i \le K\)
- \(\forall_i\ A_i + A_{i+1} \le \dfrac{\sum A_j}{2}\)
- \(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\),满足以下条件的方案数:
- \(\min(A_1,A_3)+A_2-\max(A_1,A_3) = S_1\)
- \(A_1+A_2+A_3 = S_0\)
通过一些简单的预处理,即可在 \(O(N^2)\) 的时间内解决此问题。