YC284A [ 20240504 CQYC省选模拟赛 T1 ] 数数(count)
题意
现在有四种物品,分别有 \(n1, n2, n3, n4\) 个,有多少种排列物品的方案使得任意两个相邻物品的种类不同。
\(0 \le n1, n2 \le 500, 0 \le n3, n4 \le 5 \times 10 ^ 4\)
Sol
注意到 \(n1\),\(n2\) 特别小。
设四个物品分别为 \(C, D, A, B\)。
考虑先插入 \(C, D\),再考虑 \(A, B\) 插入的贡献。
设 \(f_{i, j, k, 0/1}\) 表示已经放了 \(i\) 个 \(C\) 物品,放了 \(j\) 个 \(D\) 物品,有 \(k\) 个相邻物品不合法,最后放了 \(0/1\)。
转移是简单的。
于是问题变成了,有 \(n1 + n2 + 1\) 个空隙,选 \(i\) 个空隙,其中我们钦定 \(j\) 个空隙必选,求 \(A, B\) 物品在每一段中合法的方案数。
显然,对于一个状态,\(C, D\) 物品的贡献为 \(f_{n1, n2, j, 0} + f_{n1, n2, j, 1}\)。
考虑怎么将 \(A, B\) 插入进去。
注意到显然每一段要么是形如 \(AB...A\),或是 \(BA...B\),以及 \(AB...B\)。
因为空隙数只有 \(n1 + n2 + 1\) 个,而每一段 \(A\) 与 \(B\) 的个数之差至多变化 \(1\)。
所以这个差值是不大的。
考虑由 \(k\) 枚举 \(BA...B\) 段的个数。
设 \(n = n3, m = n4\),且 \(n \ge m\)。
显然,由 \(A\) 物品与 \(B\) 物品的差值可以算出 \(AB...\) 段的个数。
而对于 \(AB...B\) 段,可以通过剩余的空隙个数算出。
对于 \(A, B\) 没有填完的部分,则放在一起,当成 \(AB\) 填。
显然,对于 \(i\) 个位置都可以随便填,球同盒不同可空,插板即可。
答案就是: