码迷,mamicode.com
首页 > 其他好文 > 详细

区间DP

时间:2020-01-28 23:05:43      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:bsp   思想   动态   tis   区间dp   就是   ora   nbsp   HERE   

区间DP的主要思想就是先在小区间得到最优解,然后再利用小区间的最优解合并求大区间的最优解。

动态转移方程一般为$dp[i][j]=opt(dp[i][k]+dp[k+1][j]+cost[i][j])$

经典例题:取石子问题
很容易根据动态转移方程得出$O(n^3)$的解法,但是也可以通过四边形不等式优化到$O(n^2)$

四边形不等式:如果对于任意的$a<=b<=c<=d$,有$m[a,c]+m[b,d]<=m[a,d]+a[b,c]$,那么$m[i,j]$满足四边形不等式。
对于这个问题,令$m[i,j]$为取区间$[i,j]$的石子的最小代价,$s[i,j]$为取得$m[i,j]$对应的k值。
首先可以证明$m[i,j]$满足四边形不等式(以后补全)。
满足四边形不等式之后就可以证明$s[i,j-1]≤s[i,j]≤s[i+1,j]$,从而可以缩小迭代范围。

设$m_{k}[i,j]=m[i,k]+m[k,j],\ s[i,j]=d$

可推出

$\begin{cases} \forall k<d:m_{k}[i,j]\geqslant m_{d}[i,j] \\ \forall k<d:m_{k}[i+1,j]\geqslant m_{d}[i+1,j]\rightarrow s[i+1,j]\geqslant d=s[i,j] \end{cases}$

$(m_{k}[i+1,j]-m_{d}[i+1,j])-(m_{k}[i,j]-m_{d}[i,j]) \\ =(m_{k}[i+1,j]+m_{d}[i,j])-(m_{d}[i+1,j]+m_{k}[i,j]) \\ =(m[i+1,k]+m[k,j]+m[i,d]+m[d,j])-(m[i+1,d]+m[d,j]+m[i,k]+m[k,j]) \\ =(m[i+1,k]+m[i,d])-(m[i+1,d]+m[i,k])$

$\because \begin{cases} m\ satisfies\ quadrangle\ inequality \\ i<i+1<=k<d \end{cases} \\ \therefore m[i,k]+m[i+1,d]<=m[i,d]+m[i+1,k] \\ \therefore (m_k[i+1,j]-m_{d}[i+1,j])\geqslant (m_{k}[i,j]-m_{d}[i,j])\geqslant 0 \\ \therefore s[i+1,j]\geqslant s[i,j]$

 

区间DP

标签:bsp   思想   动态   tis   区间dp   就是   ora   nbsp   HERE   

原文地址:https://www.cnblogs.com/nioh/p/12239145.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!