区间DP
区间类动态规划是线性动态规划的扩展,它在分阶段地划分问题时,与阶段中元素出现的顺序和由前一阶段的哪些元素合并而来有很大的关系。令状态f(l, r)
表示将下标位置 l
到 r
的所有元素合并能获得的价值的最大值,那么 ,maxf[l][r] = {f[l][k], f[k + 1][r] + cost},
cost 为将这两组元素合并起来的代价。
for (int len = 2; len <= n; len ++ ) //枚举区间长度
for (int i = 1; i + len - 1 <= n; i ++ )
{
int l = i, r = i + len - 1;
for (int k = l; k < r; k ++ ) //枚举区间划分线
f[l][r] = max(f[l][r], f[l][k] + f[k + 1][r] + s[r] - s[l - 1]);//左区间+右区间+合并的代价
}