单调队列
文章平均质量分 70
酷酷的Herio
这个作者很懒,什么都没留下…
展开
-
P2300 合并神犇(单调队列优化dp)
P2300 合并神犇(单调队列优化dp)令fif_ifi表示前iii个数的最少合并次数,gig_igi表示在fif_ifi条件下的最小结尾值。有转移方程:fi=min(fj+i−j−1),s(j,i)≥gjf_i=min(f_j+i-j-1),s(j,i)\ge g_jfi=min(fj+i−j−1),s(j,i)≥gj因为:fj+1≤fj+1f_{j+1}\le f_j+1fj+1≤fj+1 即j+1j+1j+1,fj+1f_{j+1}fj+1至多会加1, 而jjj加1原创 2021-08-10 10:53:58 · 292 阅读 · 0 评论 -
P3580 [POI2014]ZAL-Freight(单调队列dp)
P3580 [POI2014]ZAL-Freight(单调队列dp)考虑两辆车怎么样是最优的。t1,t2,St_1,t_2,St1,t2,St1+St_1+St1+S第一辆车:[t1,t1+S][t_1,t_1+S][t1,t1+S]假设第二辆车在某个时间ti∈[t1+1,t1+S]t_i\in [t_1+1,t_1+S]ti∈[t1+1,t1+S]出发。在第一辆车到达到右端点后,必须等第一辆车过来才能继续接下来的行动。所以第二辆车到达的时间是:ti+St_i+Sti+S。原创 2021-07-26 19:55:13 · 293 阅读 · 0 评论 -
单调队列进阶
单调队列进阶1.维护矩形最值P2216 [HAOI2007]理想的正方形例子:a×ba\times ba×b的矩形中所有n×nn\times nn×n的正方形最值。先用单调队列预处理出所有(i,j)(i,j)(i,j)向左最大长度为nnn的最值。然后再用单调队列 一行一行的维护每行的最值。时间复杂度:O(ab)O(ab)O(ab)#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef un原创 2021-07-11 22:41:32 · 233 阅读 · 0 评论 -
P1776 宝物筛选 (单调队列优化dp&二进制优化)
P1776 宝物筛选 (单调队列优化dp)多重背包:dp[i][j]=dp[i−1][j−k×w[i]]+k×v[i] (k×w[i]≤j)dp[i][j]=dp[i-1][j-k\times w[i]]+k\times v[i]\ (k\times w[i]\le j)dp[i][j]=dp[i−1][j−k×w[i]]+k×v[i] (k×w[i]≤j)j=k1×w[i]+dj=k_1\times w[i]+dj=k1×w[i]+ddp[i][j]=dp[i−1][(k1−原创 2021-02-21 21:19:59 · 348 阅读 · 0 评论 -
5631. 跳跃游戏 VI (单调队列&dp)
5631. 跳跃游戏 VI (单调队列&dp)思路:显然是dpdpdp,关键在于优化状态转移。dp[i]=max{dp[j]}+a[i],j∈[i−k,i−1]dp[i]=max\{dp[j]\}+a[i],j\in[i-k,i-1]dp[i]=max{dp[j]}+a[i],j∈[i−k,i−1]。可以用单调队列实现队首储存[i−k,i−1][i-k,i-1][i−k,i−1]对应的最大f[j]f[j]f[j]。时间复杂度:O(n)O(n)O(n)class Solution {pu原创 2020-12-20 15:00:53 · 328 阅读 · 0 评论 -
P1714 切蛋糕(前缀和&单调队列)
P1714 切蛋糕(前缀和&单调队列)传送门思路:单调队列+前缀和,枚举每个区间右端点,然后利用单调队列找到在范围内的最小左端点,不断更新答案即可。时间复杂度:O(n)O(n)O(n)AC代码:#include<bits/stdc++.h>using namespace std;const int N=5e5+5;int pre[N],n,m,ans=-2e9;deque<int>q;int main(){ scanf("%d%d",&n,&am原创 2020-05-16 12:44:57 · 436 阅读 · 0 评论