为什么 \(n\) 只有 \(3\) 啊(
设 \(f[S][n][k]\) 是前 \(n\) 行,最后一行黑子的状态是 \(S\) 时,有 \(k\) 个连通块的方案数。
设 \(f(S1,S2)\) 表示当上一行状态为 \(S1\) 这一行状态为 \(S2\) 时增加(减少)的连通块数量。
\(S1,S2\) 需要使用最小表示法,不过无所谓。
那么显然有 \(f[B][n][k]=\sum f[A][n-1][k-f(A,B)]\)。
先将 \(f(A,B)\) 整体加上 \(1\),在最后减去 \(m\) 即可。
设 \(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)\),可以通过。
标签:状态,连通,LOJ6275,S2,S1,一行,sum 来源: https://www.cnblogs.com/lmpp/p/16437679.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。