$01$ 分数规划 + AC 自动机.
先把权值取个对数,就变成了最大化算术平均数.
考虑 $01$ 分数规划,二分答案 $k$ ,那么每个串的权值变为了 $V_i-k$ ,需要检验是否存在权值和 $>0$ 的方案.
注意 $=0$ 不一定是合法的,因为实际上可能一个串也没有选.
在 AC 自动机上 dp 一下,设 $f(i,j)$ 表示匹配了前 $i$ 个字符,当前在节点 $j$ 时的最大权值, dp 的时候顺便记录方案.
时间复杂度 $O(T\cdot ns|\sum|)$ ,其中 $T$ 表示二分的次数, $|\sum|$ 表示字符集大小.
1 | //%std |