区间DP总结

一般问题

把相邻符合条件的合并,来获得最优解

概念

区间类型动态规划是线性动态规划的拓展,它在分阶段划分问题时,与阶段中元素出现的顺序和由前一阶段的哪些元素合并而来有很大的关系。(例:f[i][j]=f[i][k]+f[k+1][j])

区间类动态规划的特点:

合并:即将两个或多个部分进行整合。
特征:能将问题分解成为两两合并的形式。
求解:对整个问题设最优值,枚举合并点,将问题分解成为左右两个部分,最后将左右两个部分的最优值进行合并得到原问题的最优值。

在这里插入图片描述

DP(n^3) DP+四边形不等式优化(n^2)

一般数据500还能跑跑,如果1e3基本凉了,要优化到O(n2),要用到四边形不等式优化。暂时不会,再等等吧,

某博主的证明四边形不等式优化

    cin>>n;
    memset(dp,inf);///初始化dp数组
    for(int i=1;i<=n;++i)
        cin>>a[i],pre[i]=pre[i-1]+a[i],dp[i][i]=0;
    for(int len=1;len<n;++len)///枚举区间长度
    {
        for(int i=1;i+len<=n;++i)///枚举区间起点
        {
            int j=i+len;///根据起点得到合法终点
            for(int k=i;k<j;++k)///枚举最优分割点
                dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);
            dp[i][j]+=pre[j]-pre[i-1];
        }
    }
    cout<<dp[1][n]<<endl;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值