区间DP
Posted nioh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区间DP相关的知识,希望对你有一定的参考价值。
区间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$
可推出
$egin{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] ightarrow 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])$
$ecause egin{cases} m satisfies quadrangle inequality \ i<i+1<=k<d end{cases} \ herefore m[i,k]+m[i+1,d]<=m[i,d]+m[i+1,k] \ herefore (m_k[i+1,j]-m_{d}[i+1,j])geqslant (m_{k}[i,j]-m_{d}[i,j])geqslant 0 \ herefore s[i+1,j]geqslant s[i,j]$
以上是关于区间DP的主要内容,如果未能解决你的问题,请参考以下文章