给$t$个总长度不超过$T$的字符串$t$,每个字符串有对应的代价$c_i$
给一个$S$,里面包含$k$个问号$?$,不重复地填$a-l,14$个字符,问最后形成的字符串大价值=$\sum (t)出现的次数*c_i$
$k\leq 14,T\leq 10^3,S\leq 4\times10^5$
如果都是完整的直接$AC$自动机跑步一遍就好了。考虑到不重复,用$2^{14}$当每个字符产生的状态。
$dp[i][j][mask]$搜到$s[i]$,在$AC$自动机第$k$个结点,字符使用状态$mask$。显然复杂度很高。
- 考虑没有问号的时候,$mask$不改变,枚举所有$j$在$AC$自动机,就可不用转移$mask$。
- 转移$mask$的时候只转移二进制数量=之前问号数量
这样复杂度就变成$O(T\times S+k\times T\times(C_{k}^0+C_{k}^1+…C_{k}^{k-1}))=O(k2^{k}T+TS)$
代码
1 |
|