[HNOI2019]白兔之舞
题目传送门
名字不错 ^ o ^
分析
题意:较长,自己看!
听说要单位根反演?不会.jpg。
还好有非单位根反演的做法:-)
首先朴素Dp的话大概就是
F ( i , j , l ) = ∑ a = 0 i − 1 ∑ b = 1 n F ( a , b , l − 1 ) w [ b ] [ j ] F(i,j,l)=\sum_{a=0}^{i-1}\sum_{b=1}^{n}F(a,b,l-1)w[b][j] F(i,j,l)=∑a=0i−1∑b=1nF(a,b,l−1)w[b][j]
l l l那么大令人厌恶,给他生成函数掉!
F ( i , j ) = ∑ a = 0 i − 1 ∑ b = 1 n x F ( a , b ) w [ b ] [ j ] F(i,j)=\sum_{a=0}^{i-1}\sum_{b=1}^nxF(a,b)w[b][j] F(i,j)=∑a=0i−1∑b=1nxF(a,b)w[b][j]
= ∑ b = 1 n ( ∑ a = 0 i − 1 F ( a , b ) ) w [ b ] [ j ] x =\sum_{b=1}^n(\sum_{a=0}^{i-1}F(a,b))w[b][j]x =∑b=1n(∑a=0i−1F(a,b))w[b][j]x
设 S ( i , b ) = ∑ a = 0 i F ( a , b ) S(i,b)=\sum_{a=0}^{i}F(a,b) S(i,b)=∑a=0iF(a,b)
F ( i , j ) = ∑ b = 1 n S ( i − 1 , b ) w [ b ] [ j ] x F(i,j)=\sum_{b=1}^nS(i-1,b)w[b][j]x F(i,j)=∑b=1nS(i−1,b)w[b][j]x
S ( i , j ) − S ( i − 1 , j ) = ∑ b = 1 n S ( i − 1 , b ) w [ b ] [ j ] x S(i,j)-S(i-1,j)=\sum_{b=1}^nS(i-1,b)w[b][j]x S(i,j)−S(i−1,j)=∑b=1nS(i−1,b)w[b][j]x
式子化到这里如果不是 S S S是多项式,我甚至想要矩乘!
那就试一试呗!
构造矩阵
[ w [ 1 ] [ 1 ] x + 1 w [ 1 ] [ 2 ] x w [ 1 ] [ 3 ] x w [ 2 ] [ 1 ] x w [ 2 ] [ 2 ] x + 1 w [ 2 ] [ 3 ] x w [ 3 ] [ 1 ] x w [ 3 ] [ 2 ] x w [ 3 ] [ 3 ] x + 1 ] \left [ \begin{matrix} w[1][1]x&