区间DP

区间 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] = \min\limits_i^{j-1}\left(dp[i][k]+dp[k+1][j]\right)\)

posted @ 2020-11-30 16:23  nao-nao  阅读(75)  评论(0编辑  收藏  举报