随笔分类 -  DP-单调队列

摘要:基环树直径裸题。 首先基环树直径只可能有两种形式:每棵基环树中的环上挂着的树的直径,或者是挂在环上的两个树的最大深度根之间的距离之和。 所以,先对每个连通块跑一遍,把环上的点找出来,然后对环上每个点跑一遍树的直径(这里采用DP形式,可以顺便求出最大深度,注意DP树的直径方法。。就是考虑跨过每个点的链 阅读全文
posted @ 2019-11-06 18:39 Ametsuji_akiya 阅读(141) 评论(0) 推荐(0)
摘要:A 货物收集 显然是一个二分答案的题。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 #include<queue> 7 #define db 阅读全文
posted @ 2019-11-05 16:48 Ametsuji_akiya 阅读(288) 评论(0) 推荐(1)
摘要:题 题面有点复杂,不概括了。 后面的状态有前面的最优解获得大致方向是dp。先是瞎想了个$f[i][j]$表示第$i$天手里有$j$张股票时最大收入(当天无所谓买不买)。 然后写了一个$O(n^4)$状转 $f[i][j]=max(max\{f[k][l]-(j-l)*AP[i]\},max\{f[k 阅读全文
posted @ 2019-03-01 08:17 Ametsuji_akiya 阅读(178) 评论(0) 推荐(0)
摘要:地址 注意思路!多看几遍! 很巧妙的一道题。不再是决策点以dp值中一部分含j项为维护对象,而是通过维护条件来获取决策。 首先有个贪心策略,让底层的宽度尽可能小,才能让高度尽可能高。所以应该倒着dp,表示堆$i$~$n$的最高高度$f[i]$,同时这种最值应来源于之后的j,要在设一个$g[i]$表示以 阅读全文
posted @ 2019-02-28 22:20 Ametsuji_akiya 阅读(137) 评论(0) 推荐(0)
摘要:这里已经讲得很清楚了。 方程$f_i=\min\{f_j+\max_{j+1\sim i}\}$。 本质上是决策点与区间最大值有一定关系,於是用单调队列来维护决策集合(而不是常规的),然后在决策集合中选取最小值。 然后觉得这题方法还是很重要的。没写平衡树,用优先队列(堆)来维护,单调队列维护最大值删 阅读全文
posted @ 2019-02-28 21:57 Ametsuji_akiya 阅读(156) 评论(0) 推荐(0)
摘要:地址 一排N个木板,M个工匠站在不同位置$S_i$,每个人可以粉刷覆盖他位置的、最长长度为$L_i$木板段,每刷一个有$P_i$报酬。同一木板只刷一次。求最大报酬。 根据每个人的位置dp,设$f[i][j]$为第$i$个人刷前$j$个木板的最大报酬。$j<s[i]$表示不刷。 那就有 $f[i][j 阅读全文
posted @ 2019-02-28 21:40 Ametsuji_akiya 阅读(168) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-02-22 20:36 Ametsuji_akiya 阅读(44) 评论(0) 推荐(0)