动态规划 区间dp

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

区间dp是线性dp的扩展。

分阶段地划分问题时,它与阶段中元素出现的顺序以及由前一阶段的哪些元素合并而来有很大的关系。

性质

合并 :即将两个或多个部分进行整合,当然也可以反过来;

特征 :能将问题分解为能两两合并的形式;

求解 :对整个问题设最优值,枚举合并点,将问题分解为左右两个部分,最后合并两个部分的最优值得到原问题的最优值。

适用情况
如果在思考做法时,发现每做一次选择都会影响后面、无法直观理解的,一般就是dp了。如果没有找到线性的状态转移方程,那么可以考虑区间dp。

朴素的做法
时间复杂度为O( n3 )

for(int len = 1; len <= n; len++)//枚举(除去了起点的)长度
{
        for(int j = 1; j + len <= n; j++)//枚举起点
        {
            int ends = j + len;
            //dp[][] = dp[][]有时候这里会有值的更新
            for(int i = j; i < ends; i++)//枚举分割点,更新小区间最优解
                dp[j][ends] = min(dp[j][ends], dp[j][i] + dp[i + 1][ends] + something);//有时候合并没有something
        }
    }

环状题目做法
https://oi-wiki.org/dp/interval/

四边形不等式优化
https://oi-wiki.org/dp/opt/quadrangle/

参考来源

博客----区间dp,有讲解,类型全面,有很多例题
https://blog.csdn.net/qq_40772692/article/details/80183248
OI WIKI
https://oi-wiki.org/dp/interval/
OI WIKI 四边形不等式优化
https://oi-wiki.org/dp/opt/quadrangle/

你可能感兴趣的:(算法,动态规划(dp))