动态规划 —— 区间DP

基本概念

区间类dp是线性dp的扩展,它在分阶段划分问题时,与阶段中元素出现的顺序和由前一段的哪些元素合并而来有很大关系。如状态f[i][j],它表示以已合并的次数为阶段,以区间左端点 i 为状态,它的值取决于第 i 个元素和第 j 个元素断开的位置 k ,即f[i][k]+f[k][j]的值。
特征:

  • 合并:即多个部分进行整合,或者把一个问题分解成多个部分。
  • 特征:能把问题分解成两两合并的形式。
  • 求解:对整个问题设最优解,枚举合并点,将问题分解成左右两个部分,最后合并左右两个部分的最优值得到原问题的最优值。与分治算法的思想类似。

模板

int dp[N][N];

for(int i=1;i<=n;i++)
    dp[i][i] = (初始值);
    
for(int len=2;len<=n;len++){
    
     //区间长度
    for(int i=1;i<=n;i++){
    
     //枚举起点
        int j=i+len-1; //区间终点
        if(j>n) //越界结束
            break;           
        for(int k=i;k<j;k++) //枚举分割点,构造状态转移方程
            dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+w[i][j]);
    }
}

例题

经典例题是石子合并、能量项链、凸多边形的划分。
石子合并三种题型
能量项链

猜你喜欢

转载自blog.csdn.net/qq_45949914/article/details/107948144
今日推荐