转载自https://blog.csdn.net/u014800748/article/details/45750737
在动态规划中,经常遇到形如下式的状态转移方程:
dp[ i ][ j ]=min( dp[ i ][ j ] , dp[i][k-1] + dp[ k ][ j ]+w[ i ][ j ] ) ; (i≤k≤j)(min也可以改为max)
上述的dp(i,j)表示区间[i,j]上的某个最优值。w(i,j)表示在转移时需要额外付出的代价。该方程的时间复杂度为O(N^3)。
(1)区间包含的单调性:如果对于a≤b<c≤d,有w(b,c)≤w(a,d),那么说明w具有区间包含的单调性。(简记为如果小区间包含于大区间中,那么小区间的w值小于等于大区间的w值)
(2)四边形不等式:对于( a < b <= c< d ),如果 w[a][c]+w[b][d]<=w[b][c]+w[a][d]成立,则称函数w[i][j]满足四边形不等式,简记为交叉小于包含
定理一:如果上述的w函数同时满足区间包含单调性和四边形不等式性质,那么函数dp也满足四边形不等式性质。
我们再定义s(i,j)表示dp(i,j)取得最优值时对应的下标(即i≤k≤j时,k处的w值最大,则s(i,j)=k)。此时有如下定理
定理二:假如dp(i,j)满足四边形不等式,那么s(i,j)单调,即s(i,j)≤s(i,j+1)≤s(i+1,j+1)。
好了,有了上述的两个定理后,我们发现如果w函数满足区间包含单调性和四边形不等式性质,那么有s(i,j-1)≤s(i,j)≤s(i+1,j)。
即原来的状态转移方程不变,但是k的取值范围大大缩小:
dp[ i ][ j ]=min( dp[ i ][ j ] , dp[ i ][ k-1 ] + dp[ k ][ j ] + w[ i ][ j ] ; ( s(i,j-1) ≤k≤ s(i+1,j) ) ( min也可以改为max)
原文:https://www.cnblogs.com/-citywall123/p/10902600.html