AGC021F Trinity【计数,NTT】

很久没写博客了,诈个尸(

题目描述:有一个 \(n\)\(m\) 列的黑白表格,定义一个映射 \(f:\{0,1\}^{n\times m}\rightarrow (\{A_n\},\{B_m\},\{C_m\})\),其中 \(A_i\) 为第 \(i\) 行第一个黑格的列号(不存在则为 \(m+1\)),\(B_i\) 为第 \(i\) 列第一个黑格的行号(不存在则为 \(n+1\)),\(C_i\) 为第 \(i\) 列最后一个黑格的行号(不存在则为 \(0\)),求 \(f\) 的值域大小。

数据范围:\(n\le 8000,m\le 200\)

我们设 \(f_{i,j}\) 表示 \(i\times j\) 的表格中,每行都有数的答案,那么 \(Ans=\sum_{i=0}^n\binom{n}{i}f_{i,j}\)

然后考虑dp,若当前列不新增行,那么 \(f_{i,j}(1+i+\binom{i}{2})\rightarrow f_{i,j+1}\)

如果新增行呢?这就是一个很神奇的思路了。考虑 \(B_{j+1}-1,C_{j+1}+1\) 和新增的 \(k\) 行共 \(k+2\) 行,需要在共 \(i+k+2\) 行中选出来它们的位置,就是 \(\binom{i+k+2}{i}\),综上dp方程就是

\[f_{i,j}=(\binom{i+1}{2}+1)f_{i,j-1}+(i+2)!\sum_{k=0}^{i-1}\frac{f_{k,j-1}}{k!}\frac{1}{(i+2-k)!} \]

使用 NTT 优化,时间复杂度 \(O(nm\log n)\)

code

posted @ 2020-03-28 20:52  mizu164  阅读(174)  评论(0编辑  收藏  举报