第二次集训总结

区间DP

区间DP是一类以区间作为状态进行转移的动态规划,由于要对区间进行DP,所以时间复杂度通常为 $O(n^2)$ 、$O(n^3)$ 左右。

在求解时,通常在区间内枚举断点,再合并断点两边的区间以获得最优解。

代码如下:

for (int len=2;len<=n;len++){ //枚举区间长度
    for (int i=1;i<=n-len+1;i++){ //枚举左端点
        int j=i+len-1; //计算右端点
        for (int k=i;k<j;k++){ //枚举断点
            dp[i][j]=min(dp[i][k]+dp[k+1][j]+cost(i,j)); //求解最优值
        }
    }
}

以上代码时间复杂度为 $O(n^3)$

例题

由于朴素区间DP时间复杂度太大,所以以下列举几种常见的优化方法:

  1. 前缀和优化:在 $O(1)$ 的复杂度内得到区间的和
  2. 四边形不等式优化:详见OIwiki,虽然用着方便,但证明很复杂

背包DP

posted @ 2023-12-11 19:52  Code953  阅读(18)  评论(0)    收藏  举报  来源