题解
这道题第一眼看是维护前缀后缀然后合并的,但是这样复杂度很高,据说可以水过
因此,不考虑合并。那么问题就是去掉每一个物品,做一次多重背包。这样的复杂度为\(O(n^2m)\)。
考虑以上算法的重复计算部分。可以发现有许多是重复计算了的。那么就可以考虑分治,因为分治可以省去许多重复计算。那么算法就显而易见了。
这道题第一眼看是维护前缀后缀然后合并的,但是这样复杂度很高,据说可以水过
因此,不考虑合并。那么问题就是去掉每一个物品,做一次多重背包。这样的复杂度为\(O(n^2m)\)。
考虑以上算法的重复计算部分。可以发现有许多是重复计算了的。那么就可以考虑分治,因为分治可以省去许多重复计算。那么算法就显而易见了。
我现在希望求出一个更强大num数组一一对于字符串S的前i个字符构成的子串,既是它的后缀同时又是它的前缀,并且该后缀与该前缀不重叠,将这种字符串的数量记作num[i]。
然后输出$ _ {i = 1} ^ L (num[i] + 1) $
1 | #include <cstdio> |