动态规划 —— 区间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]);
    }
}

例题

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅梦曾倾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值