LGP5339口胡
练习时长两年半的偶像练习生CXK,喜欢唱、跳、rap、篮球,music~
此题的难点在于对每种字符的数量作了限制。。。
设 \(f[n][x][y][z][m]\) 表示在前 \(n\) 个人中有 \(x\) 人喜欢唱,\(y\) 人喜欢跳, \(z\) 人喜欢 rap 和 \(n-x-y-z\) 人喜欢篮球,且整个字符串与“唱、跳、rap、篮球”这个字符串的匹配长度为 \(m\)。
设 \(F[n][m](x,y,z)=\sum_{a,b,c} f[n][a][b][c][m] x^ay^bz^c\),那么比较显然有:
\[F[n][0]=F[n-1][0](1+y+z)+F[n-1][1](1+z)+F[n-1][2](1+y)+F[n-1][3](y+z)
\]
\[F[n][1]=F[n-1][0]x
\]
\[F[n][2]=F[n-1][1]y
\]
\[F[n][3]=F[n-1][2]z
\]
设 \(G[n]=F[n][0]\),那么有:
\[G[n]=G[n-1](1+y+z)+G[n-2](x++xz)+G[n-3](xy+xy^2)+G[n-4](xy^2z+xyz^2)
\]
也就是说构成大字符串的可以被划分成这几个小字符串:
\[\texttt{B,C,D,AC,AD,ABB,ABCB,ABCC}
\]
也就是:
\[\texttt{b,c,d,ac,ad,ab^2,ab^2c,abc^2}
\]
但是 GF 是四元的,这很不好处理(复杂度会升天)。。。
考虑一个很奇怪的想法:枚举某种字符的出现次数会超过规定次数。
相当于令另外三种字符的出现次数小于某个数。
但是这样还需要枚举某两种字符和三种字符。
设 \(f(S)\) 为 \(S\) 这些字符的出现次数超出了规定,那么 \(\sum f(S)\) 为不限制的情况下不讨论 CXK 的方案数。
直接用这个方案数减去非 \(S=0\) 的所有 \(f(S)\) 即可。现在只需要知道怎么算不限制的方案数。
这个应该是一个很简单的 \(O(n)\) 的 DP。
总复杂度 \(O(n^3)\)。
不幸的是,这个做法会炸空间(