LOJ6275口胡
为什么 \(n\) 只有 \(3\) 啊(
设 \(f[S][n][k]\) 是前 \(n\) 行,最后一行黑子的状态是 \(S\) 时,有 \(k\) 个连通块的方案数。
设 \(g(S1,S2)\) 表示当上一行状态为 \(S1\) 这一行状态为 \(S2\) 时增加(减少)的连通块数量。
\(S1,S2\) 需要使用最小表示法,不过无所谓。
那么显然有 \(f[B][n][k]=\sum f[A][n-1][k-g(A,B)]\)。
设 \(F_{n,A}(x)=\sum f[A][n][i]x^i\),那么应该有类似 \(F_{n,A}(x)=\sum f_{n-1,B}(x)G_{B,A}(x)\) 的东西。
把这个看成长度为 \(O(m)\) 的循环卷积,带入单位根之后矩阵快速幂+IDFT即可。
复杂度 \(O(m9^3\log m)\),可以通过。