这是一道很直接的 DP 题但难点在于知道从哪转移。首先我们找到 在 中的所有出现位置并记为 。定义 为消除前 次出现所需要的最小次数,且第 个出现是完整消除的(这样可以避免数重),定义 为所对应的不同方法的次数。
当考虑第 个出现时,首先找到 左边第一个不与 重叠的出现 ,也就是说 是最大的使 成立的数,我们不需要考虑 与 之间的位置转移,因为 到 之间的操作会使 位置的出现被部分消除。然后我们再找到最左边与 重叠的出现 ,也就是说 是最小是使 成立的数。 左边的出现就不能考虑了因为 出现就无法被消除,所以我们考虑从 到 位置的转移,最终的答案就是所有满足 且 为最小值的 的 的和,其中 为最后一个出现的位置,具体实现详见代码: