【基础知识】——DP(小笨蛋总结)

本文介绍了动态规划中的两种优化技巧:单调队列和斜率优化。单调队列主要用于处理内层循环固定长度的问题,如最大子段和和旅行问题。斜率优化则适用于处理涉及区间操作的dp方程,例如任务安排和玩具装箱问题。文章详细解析了两种优化方法的步骤和应用实例。
摘要由CSDN通过智能技术生成

优化

单调队列

用于优化内层循环,当内层循环总是有一个固定长度的时候,想一想滑动窗口,就可以试着用单调队列来更新了
共分为3步:(不是一成不变)
1.通过长度限制剔除队头
2.通过最优解限制剔除队尾,把当前元素入队
3.用队头更新答案

经典例题:
最大子段和(板子)
绿色通道(此处需要先更新答案,再踢队尾,因为最优解的判定需要当前结果)
C u t    t h e    S e q u e n c e Cut\; the \;Sequence CuttheSequence(这个与每段的最大值有关,无法直接转移队头,需要扫一遍整个队列,每次求最优解)
旅行问题 (注意单调队列的循环方向。这里注意前缀和的处理,并非直接从头加到尾,而是先给 s u m [ i ] , s u m [ i + n ] sum[i],sum[i+n] sum[i],sum[i+n]赋相同值,接着再进行前缀和)

斜率优化

可以把问题看成每次对一段区间进行操作
对于这样形式的 dp 方程: d p [ i ] = M i n / M a x ( a [ i ] × b [ j ] + c [ j ] + d [ i ] ) dp[i]=Min/Max(a[i]\times b[j]+c[j]+d[i]) dp[i]=Min/Max(a[i]×b[j]+c[j]+d[i])
该方程的关键点在于 a [ i ] × b [ j ] a[i]\times b[j] a[i]×b[j] 这一项,它既有 i 又有 j,于是单调队列优化不再适用,可以尝试使用斜率优化。

首先把式子变成 y = k x + b y=kx+b y=kx+b的形式,
其中 y y y为含 j j j的表达式, k , b k,b k,b为含 i i i的表达式或常量, x x x为含 j j

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值