2023“钉耙编程”中国大学生算法设计超级联赛(4)Number Table

题意

对于一个\(2\times n\)的矩阵,若每行每列数均不同且均\(\in[0,2^k)\),同时\(2n\)个数异或和为\(0\)则称该矩阵合法。给定\(n,k\),求总方案数。
\(n\le 40,k\le 10000\)

做法

考虑若只有一行,即求\(n\)个不相同的数异或和为\(0\)的方案数:
假定前\(n-1\)个数不同且已确定,此时仅需考虑第\(n\)个数是否在前面已经出现过,容斥即可,令\(f_n\)\(n\)个不相同的数异或和为\(0\)的方案数,有

\[f_n=(2^k)^{\underline{n-1}}-(n-1)\times f_{n-2}\times [2^k-(n-2)] \]

思考原问题,假定第一行与第二行有\(i\)对数相同,那么无论这\(i\)对数的位置如何,此时的方案数为

\[f_{2\times(n-i)}\times [2^k-2\times(n-i)]^{\underline{i}} \]

那么现在仅需求\(i\)对数的位置的方案数,注意无论第一行位置如何,第二行位置的方案数相同,令第二行位置方案数为\(num\),则方案数为

\[{n\choose i}\times num \]

现在将问题转化为:

\(m\)个不同的整数\(a_i\in[1,n]\)\(a_i\neq i\)的方案数(\(m\le n\)

这个问题可以用\(\text{dp}\)\(O(m^3)\)复杂度解决,由于转移过程十分复杂在此不详细展开。

应该有低于\(O(m^3)\)复杂度的做法,如果方便麻烦赐教

综上,令方案数\(num\)\(g_i\),题目所求答案为:

\[\sum\limits_{i=0}^n f_{2\times (n-i)}\times [2^k-2\times(n-i)]^{\underline{i}}\times {n\choose i}\times g_i \]

时间复杂度\(O(n^4)\)

posted @ 2023-07-27 22:56  Grice  阅读(68)  评论(0编辑  收藏  举报