题意
给定 \(n\) 种颜色的球,每一种有 \(k\) 个,随意排列 \(n \times k\) 个球,然后将每种球的左边第一个球变为第 \(n + 1\) 种颜色,问操作过后有多少不同的颜色序列。
\(n, k \le 2000\)。
Sol
先将修改的球当成一种新的颜色。
注意到一个性质,假设最终颜色序列一个前缀的第 \(i\) 个白球,显然在 \(i\) 左边只可能出现至多 \(j < i\) 种颜色的球。
因此考虑设 \(f_{i, j}\) 表示现在放了 \(i\) 个白球,剩余颜色有 \(j\) 个被放了,每次转移要么放一个白球,要么放一整种颜色的球。
如果直接乱放是不好去重的。
经典套路,考虑映射一个不重不漏的特殊性质。
钦定每次操作必须放到右边第一个空位,重复的问题显然解决。
- \(f_{i, j} \to f_{i + 1, j}\)
- \(f_{i, j} \times \dbinom{nk - i - (k - 1)j - 1}{k - 2} (n - j) \to f_{i, j + 1}\)
复杂度:\(O(nk)\)。
标签:种颜色,Ball,颜色,nk,AGC002F,白球,Leftmost From: https://www.cnblogs.com/cxqghzj/p/18409038