题目描述
有一个 N N N 行 M M M 列的矩阵,你可以选择一些位置涂黑,其它位置涂白。
对一个矩阵,我们计算出一个长度为 N N N 的序列 A A A ,以及两个长度为 M M M 的序列 B B B 和 C C C :
令 A i A_i Ai 为第 i i i 行第一次出现黑色的位置的列号,如果第 i i i 行全白,则为 M + 1 M+1 M+1 ;
令 B i B_i Bi 为第 i i i 列第一次出现黑色的位置的行号,如果第 i i i 列全白,则为 N + 1 N+1 N+1 ;
令 C i C_i Ci 为第 i i i 列最后一次出现黑色的位置的行号,如果第 i i i 列全白,则为 0 0 0 ;
请你计算,有多少种不同的 { A , B , C } \{A,B,C\} {A,B,C} 三元组可能得到,输出答案对 998244353 998244353 998244353 取模后的结果。
数据范围
1 ≤ N ≤ 8000 1 \leq N \leq 8000 1≤N≤8000, 1 ≤ M ≤ 200 1 \leq M \leq 200 1≤M≤200 。
题解
为什么有个 m ≤ 3 m \le 3 m≤3 的部分分。。算了我本来就菜。
假设我们一开始每个格子都任意染色,那我们考虑什么时候两个染色方案的这三个数组相同。发现当存在一个点,它的左、上、下同时存在黑色格子的话,那这个点去掉后数组不会改变。所以根据这个我们可以进行 dp \text{dp} dp : f [ i ] [ j ] f[i][j] f[i][j] 表示前 j j j 列有 i i i 行有黑色点的方案数,考虑转移到 f [ i + k ] [ j + 1 ] f[i+k][j+1] f[i+k][j+1] 。当 k = 0 k=0 k=0 的时候,就只能加入 0 ∼ 2 0 \sim 2 0∼2 个点,转移显然。当 k > 0 k>0 k>0 的时候,考虑那 i + k i+k i+k 个当中第一个是新插入的在第 x x x 个,最后一个新插入的从后往前是第 y y y 个,而第 x x x 之前和 y y y 之后分别最多能够重合一个点,所以它的转移系数应当是 ∑ x = 1 i + 1 ∑ y = 1 i − x + 2 C i + k − x − y k − 2 × x × y \sum_{x=1}^{i+1}\sum_{y=1}^{i-x+2}C_{i+k-x-y}^{k-2} \times x \times y ∑x=1i+1∑y=1i−x+2Ci+k−x−yk−2×x×y ,用组合数的性质可以推到这个系数为 C i + k + 2 k + 2 C_{i+k+2}^{k+2} Ci+k+2k+2 。然后发现这个转移是卷积的形式,所以用 Ntt \text{Ntt} Ntt 优化即可。效率: O ( n m log n ) O(nm\log n) O(nmlogn) 。