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 1089. 烽火传递

题解

AcWing 1090. 绿色通道

题解

AcWing 1091. 理想的正方形

题解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值