区间DP 小笔记
总体思想
用许多的小区间 的最优解, 进行递推->,最终得到一个大区间(即答案区间)的最优解
关键点
一、确定起点、终点、分割点
二、确认初始化——如:数组初值——一个极小值或极大值
三、确认特殊赋值——如:无需操作的区间赋为0
四、首先枚举长度,再枚举起点——
如果先枚举起点,再枚举长度的话,那么从这个点为起点的一些大区间就被提前算了,但实际上,大区间是用小区间推出来的,这样做就不对了。
板子_-_-_
for (int len = 1; len <= n; len++) //枚举长度 { for (int j = 1; j + len <= n + 1; j++) //枚举起点,且 ends<=n { int ends = j + len - 1; //终点 for (int i = j; i < ends; i++) //枚举分割点,更新小区间最优解 { dp[j][ends] = min(dp[j][ends], dp[j][i] + dp[i + 1][ends] + something); //一个大区间由它中间的小区间得到 //注意这里i的范围,i+1<=ends } } }

浙公网安备 33010602011771号