CF1237F题解
首先简化问题,在 \(1\times n\) 的棋盘中放入 \(a\) 个单格牌和 \(b\) 个双格牌的方案数(有些位置禁止放)。
考虑 \(dp\),设 \(f_{i,j}\) 表示在前 \(i\) 个格子中放入 \(j\) 个 \(2\) 格牌的方案数。
转移:若 \(i\) 和 \(i-1\) 都能放,\(f_{i,j}=f_{i-1,j}+f_{i-2,j-1}\),否则 \(f_{i,j}=f_{i-1,j}\)。
那么最后的方案数就是 \({{cnt-2b}\choose{a}}f_{n,b}\)(\(cnt\) 是能放的格子总数)。
发现原问题,行列是独立的,在只考虑列的放置情况时,横放相当于单格牌(因为仅仅占了 \(1\) 行),竖放相当于双格牌,因此枚举横放个数和竖放个数,套用上面的式子就能计算出只考虑列的方案,但是同一个列的放置情况可能对应很多种行的放置,即每个牌可以放置在许多列。
这时发现,竖放对于行来说对应单格牌,横放对应双格牌,问题又转换成最开始的问题,因此我们对行和列分别 \(dp\),记为 \(f,g\)。
则最后答案为 \(\sum_i\sum_j{{cnt1-2i}\choose{j}}{{cnt2-2j}\choose{i}}f_{n,i}g_{m,j}i!j!\)(阶乘是行列匹配)。
浙公网安备 33010602011771号