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)\)

不幸的是,这个做法会炸空间(

posted @ 2022-07-05 16:40  Prean  阅读(16)  评论(0编辑  收藏  举报
var canShowAdsense=function(){return !!0};