区间DP模板和四边形优化

for(int len = 1;len<=n;len++){//枚举长度
        for(int j = 1;j+len<=n+1;j++){//枚举起点,ends<=n
            int ends = j+len - 1; 
            for(int i = j;i<ends;i++){//枚举分割点,更新小区间最优解
                dp[j][ends] = min(dp[j][ends],dp[j][i]+dp[i+1][ends]+something);
            }
        }
    }

区间DP模板

模板题:poj1651,hdu4632

区间dp,就是在区间上进行动态规划,求解一段区间上的最优解。主要是通过合并小区间的最优解,进而得出整个大区间上最优解的dp算法。

具体操作
枚举区间长度len为每次分割成的小区间长度(由短到长不断合并),
中层枚举该长度下可以的起点(终点即为起点+len)
内层在这个起点终点之间枚举分割点,求解这段小区间在某个分割点下的最优解。

四边形不等式优化的应用

状态转移方程骨架:

[m(i,j)=min{m(i,k-1),m(k,j)}+w(i,j) \(i≤k≤j) ]

优化目标:O(N3)到O(N2)
判定性质:

1:区间包含的单调性:如果对于i≤i'<j≤j',有w(i',j)≤w(i,j')

2:四边形不等式:如果对于i≤i'<j≤j',有w(i,j)+w(i',j')≤w(i',j)+w(i,j')

定理一:如果上述的w函数同时满足区间包含单调性和四边形不等式性质,那么函数m也满足四边形不等式性质。
定理二:假如m(i,j)满足四边形不等式,那么s(i,j)单调,s(i,j)≤s(i,j+1)≤s(i+1,j+1)。
s(i,j)表示m(i,j)取得最优值时对应的下标(即i≤k≤j时,k处的w值最大,则s(i,j)=k)
优化后的状态转移方程骨架

[m(i,j)=min{m(i,k-1),m(k,j)}+w(i,j)\(s(i,j-1)≤k≤s(i+1,j)) ]

原文地址:https://www.cnblogs.com/dpsama/p/12356825.html