魔法 [线段树优化DP]
也许更好的阅读体验 \(\mathcal{Description}\) 小 \(D\) 正在研究魔法。 小 \(D\) 得到了远古时期的魔法咒语 \(S\) ,这个咒语共有 \(n\) 个音节,每个音节都可以 抽象为一个小写英文字母。 但是很快小 \(D\) 发现这个咒语并不能直接说出——它具有一定的危险性。 小 \(D\) 进行了一些仔细的研究,很快发现危险来源于 \(m\) 个禁忌词 \(T_1 , T_2 , \ldots, T_m\) 。 小 \(D\) 发现,只要说出的咒语中,连续地包含了其中某个禁忌词,那么就会带来很 大的危险。换言之,对于任意 \(1 ≤ i ≤ m\) , \(T_i\) 都不能是最终说出的咒语 \(S'\) 的子串。 于是小 \(D\) 决定在原来的咒语 \(S\) 上做出一定的删减,使得它不再包含任何禁忌词。 小 \(D\) 发现如果他跳过咒语中第 \(i\) 个音节,那么咒语的威力会减少 \(a_i\) 。 小 \(D\) 想要知道,如何跳过音节可以得到一个安全的咒语,而威力的减少量最少。 值得一提的是,如果小 \(D\) 跳过了某个音节,那么与之相邻两个音节也不会变得连续。 但是小 \(D\) 并不会,请你帮帮他。 \(\mathcal{Solution}\) 先用所有的 \(T\) 对 \(S\) 做 \(KMP\) ,得到若干个区间