P7296 [USACO21JAN] Uddered but not Herd G
题意
给出一个长度为 \(n\) 的小写字母串 \(s\),求一个新的字符表,使得这个串是最少个字符表拼起来的子串。
\(n\le 10^5\)。\(s\) 中最多有 \(20\) 个不同的字母。
思路
发现如果在字母表中有 \(s_i>s_{i+1}\) 则说明需要一个新的字母表,那么我们可以直接考虑倍增。维护一下相邻两个字母出现多少次,那么就有:
\[f_C=\min_{c\in C}(f_{\complement_{C}\{c\}}+\sum_{i\in C,i\neq c}v_{i,c})
\]
注意 \(f_0=1\)。因为我们不管怎么样也是需要一个初始的字母表来表示的。
时间复杂度 \(2^kk^2\)。

浙公网安备 33010602011771号