免责声明:下面描述的方法并不通用,但它通常可以解决问题或帮助您找到正确的解决方案。
如果一个问题要求您以最佳方式销毁/折叠/合并(或类似)一个数组,那么您应该尝试使用子段上的动态规划来解决它。
让我们得到 dp[l][r] - 索引从 l 到 r 的子段的最佳答案。动力学的重新计算高度依赖于任务,但有以下一般思路:
1) 查看极端元素 l 和 r。如果它们以某种其他方式匹配或互补,那么很可能可以通过 dp[l+1][r-1] 更新 dp[l][r] 的值。否则通过 dp[l][r-1] 或 dp[l+1[r]。
2) 段 [l;r] 不能通过单一结构表示的情况经常发生。那么需要考虑把这个subsegment所有可能的section分成两部分,即从l到r-1遍历元素k,通过dp[l][k]和dp[重新计算dp[l][r] k+1][r]。在更小的子段中,这些部分也被整理出来,因此,实际上,将子段 [l;r] 不仅分为两个部分,而且分成任意数量的部分的选项都被考虑在内。