区间 DP 指的是在区间上进行 DP ,一般状态是设 (dp[i][j]) 指将区间 ([i,j]) 如何如何的花费。
区间 DP 一般是在区间中枚举断点分割成两个较小的区间,而大区间的花费取决于两个较小区间,并且与合并顺序有关。
一般来说,我们可以找到一个转移式子是 (dp[i][j] = dp[i][k]+dp[k+1][j]) 当然,也许会有别的形式的转移方程存在。
对于区间 DP ,一般有两种解决的形式,一种是记忆化搜索,另一种就是直接DP。
在记忆化搜索的时候我们当然不需要考虑枚举顺序,但是在写 DP 的时候我们当然需要考虑枚举顺序了。为了使得不会调用到尚未处理到的地方,我们需要枚举区间长度。
对于方程 (dp[i][j] = min(dp[i][k],dp[k+1][j])) 我们显然发现它的复杂度至少是 (n^3) 的,所以区间 DP 并不能解决很大的数据,关于优化……留坑。
例题1:石子合并
题目给出的是一个环,我们枚举断点将环转化为链,然后可以进行记忆化搜索,设 (dp[i][j]) 为合并 ([i,j]) 的价值。
(dp[i][j] = minlimits_i^{j-1}left(dp[i][k]+dp[k+1][j] ight))