codechef Chef and The Colored Grid

难度

\(hard\)

题意

\(3\times n\)的方格,前两行已分别填入\(n-\)排列,要求求第三行填入\(n-\)排列,使得每行每列数不重复的方案数(数据保证前两行合法)\(n\le 1000\)

做法

建立二部图\(G\):左部分为位置,右部分为数字,边为可行

则转换为求二部图完美匹配方案数

考虑容斥,\(G\)的补图为\(G'\),其是一个性质很好的二部图:每个左节点恰好连出两条边

\(F(x)\)\(K_{n,n}\)完美匹配,恰好用到\(G'\)\(x\)条边,\(\varphi(x,G')\)\(G'\)恰好用到\(x\)条边的方案数
显然:\[F(x)=\varphi(x,G')(n-x)!-F(x+1)\binom{x+1}{x}-...-F(n)\binom{n}{x}\]

考虑计算\(\varphi(x,G')\)
\(C(x,n)\)为阶为\(n\)的圈匹配为\(x\)的方案数;\(L(x,n)\)为阶为\(n\)的链匹配为\(x\)的方案数
显然:\[L(k, n) = L(k-1, n-2) + L(k, n-1);C(k, n) = L(k, n) + L(k-1, n-2)\]

然后用\(C\)背包一下就行

你可能感兴趣的:(codechef Chef and The Colored Grid)