Acwing -- 单调队列优化的DP问题

Posted Jozky86

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Acwing -- 单调队列优化的DP问题相关的知识,希望对你有一定的参考价值。

引入

acwing154 滑动窗口

题目链接
题解

应用

在这里插入图片描述
闫氏最优化问题分析法

135 最大子序和

题目:
输入一个长度为 n 的整数序列,从中找出一段长度不超过 m 的连续子序列,使得子序列中所有数的和最大。

题解:
在这里插入图片描述
我们把这个问题的集合分成n份,第k份表示以A[k]结尾的最大连续子序列是多少
我们以A[k]结尾为例,我们从A[k]开始向前延申长度j,j的范围是[1,m],我们引入前缀和,S[k]表示前k个数的前缀和,那么图中长度为j,以A[k]结尾的连续子序列答案就是:S[k]-S[k-j],
现在S[k]是固定的,我们要让值最大,就要使得S[k-j]最小,就相当于在长度为m的区间(即从[k-m,k])内找最小值,这不就把问题引入到滑动窗口
时间复杂度:O(n)
在这里插入图片描述

1088.旅行问题

题解
题目:
一个环形公路,由n个车站,每个站有若干升汽油(有的站可能油量为零),每升油可以让汽车行驶一千米。
从某个车站出发,一直按顺时针(或逆时针)方向走遍所有的车站,并回到起点。
在一开始的时候,汽车内油量为零,John 每到一个车站就把该站所有的油都带上(起点站亦是如此),行驶过程中不能出现没有油的情况。
任务:判断以每个车站为起点能否按条件成功周游一周。

题解:
破环成链,链复制
我们从点i出发,能否到i+1,取决于i的油量是否大于等于d[i],即i到i+1的距离
所有我们规定数组w[i]=a[i]-d[i]
s[i]表示w[i]的前缀和
从i出发到j,这个过程的油量始终>=0,等价于在[i,i+n-1]中,对任意的j,i<=j<=i+n-1,均有s[j]-s[i-1]>=0,如果min(s[j]-s[i-1])>=0,就说明能到达,其中i是固定的,所有就是找s[j]的最小值。
这就把问题引到滑动窗口,这既是单调队列优化
题目中说顺时针或逆时针有一个就行,所以我们还要倒着来遍单调队列

AcWing 1087. 修剪草坪28

题解

AcWing Acwing 1089. 烽火传递

题解

以上是关于Acwing -- 单调队列优化的DP问题的主要内容,如果未能解决你的问题,请参考以下文章

《算法竞赛进阶指南》0x59单调队列优化DP AcWing 299裁剪序列

$Poj3017 Cut The Sequence$ 单调队列优化$DP$

单调队列以及单调队列优化DP

单调队列优化dp

单调队列优化DP

7.14 单调栈 单调队列 +dp优化