题意
有n和串,要从中按顺序选出一些,使它们拼在一起(不能交换顺序)长度为k,求最小字典序(满足一定有解)。
范围
n<=3000,k<=1e4,∑∣si∣\sum |s_{i}|∑∣si∣ ≤\le≤ 1e6
题解
考虑DP,记前i个串组成长度为j的字典序最小的串为f,但这样显然效率太低,又不可直接优化,故考虑有什么性质可以用来优化。
考虑前i个串组成长度为j的串后,后面的长度也要能够由后面的串拼出来才行,于是只需要记录对于前i个串的那些合法的长度的最小串即可。这些串是否能高效表示出来?再进一步考虑,对于每一个合法长度的最小串,既然都最后能拼出来了,那么目前字典序大的那些串(指仅比较有的字符,不考虑长度)一定更劣,即没有用了,所以只需要保留字典序最小的那一些,即只会是一个最小串的一些前缀,用一个字符串加上一个bitset即可记录。
考虑转移,对于每个合法位置(当前最小串的前缀),接上当前串,如果合法则同之前的思路,取最小串的一些前缀,再用类似的思想与原来的最小串比较,在比较时需要用到当前串和原串的lcp,用exkmp即可求出。