SOS Dynamic Programming [Tutorial] – usaxena95 on CodeForces
通过优化,将子集求和类相关问题的时间复杂度由朴素的 优化到 。
通过优化,将子集求和类相关问题的时间复杂度由朴素的 优化到 。
有集合,,则有。因此,若我们枚举集合,枚举集合的子集的子集做状压DP时,可以得到正确的复杂度而非错误的。参见AtCoder ABC 187 F – Close Group。
可以这样证明:考虑某个子集的子集,则中的每个元素有三种状态:,,。显然这样可以唯一表示,以及,对应了所有子集的拆分方案。故原式成立。
Problem D – Codeforces Round #127 (Div. 1)
多模式串匹配,是不是又是AC自动机啊?
显然,每个文本串中,模式串的排列构成的子序列的逆序对数量只和模式串有关。所以我们可以对模式串建立Trie树,每扫入一个文本串的单词就进行匹配。可以做到,K为文本串总长(虽然单个字符串的长度极小可以)。这样就构建出一个由到构建的数列。
枚举的全排列然后暴搜显然不可行。我们注意到,如果钦定一个数,只要知晓当前的排列中前位分别是哪些数,就可以立刻算出加入排列后新增的逆序对数量。则我们考虑状压DP。 (更多…)