关于DP的几种优化

单调队列优化

通常转移条件满足:
d p [ i ] = m a x ( d p [ j ] + a [ j ] ) ( ∣ j − i ∣ < x ) dp[i]=max(dp[j]+a[j])(|j-i|<x) dp[i]=max(dp[j]+a[j])(ji<x)
即转移条件只跟前面的某一项有关,且满足取最值条件。

斜率优化

通常转移条件满足: d p [ i ] = m a x ( d p [ j ] + a [ i ] ∗ a [ j ] ) ( j < i ) dp[i]=max(dp[j]+a[i]*a[j])(j<i) dp[i]=max(dp[j]+a[i]a[j])(j<i)
即存在某一项即有 i i i,又有 j j j
入门·模板
斜率优化比较复杂,涉及到了数形结合。
斜率优化的第一步是找出状态转移
这道题的 n 2 n^2 n2暴力解法很简单,有转移如下
d p [ i ] = m i n 0 < = j < i ( d p [ j ] + ( ∑ k = j + 1 i C k + i − j − 1 − L ) 2 ) dp[i]=min_{0<=j<i}(dp[j]+(\sum_{k=j+1}^{i}C_k+i-j-1-L)^2) dp[i]=min0<=j<i(dp[j]+(k=j+1iCk+ij1L)2)
a i = i + s u m i a_i=i+sum_i ai=i+sumi
a j = j + s u m j + 1 + L a_j=j+sum_j+1+L a

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值