wqs 二分(凸完全单调性)】的更多相关文章

题意:x轴上有n个人,让你放置m个集合点,使得每个人往离他最近的集合点走,所有人走的距离和最短. 把距离视为花费,设$dp[i][k]$表示前i个人分成k段的最小花费,则有递推式$dp[i][k]=min\{dp[j][k-1]+w(j,i)\}$,其中$w(j,i)$可以$O(1)$求出. 显然,如果考虑段数的话,光状态数就有n^2个,肯定行不通.不过这题的最优解对段数的函数是凸的,因此可以用WQS二分来打破段数的限制. 给每个集合点加上一个额外的花费c,然后忽略段数的限制,这样递推式就变成了…
其实是一个还算 trivial 的知识点吧--早在 2019 年我就接触过了,然鹅当时由于没认真学并没有把自己学懂,故今复学之( 1. 决策单调性 引入:在求解 DP 问题的过程中我们常常遇到这样的问题:我们列出了一个 \(dp\) 状态转移方程式形如 \(dp_i=\min\limits_{j<i}dp_j+w(j+1,i)\) 或类似的形式,暴力转移时间复杂度 \(\mathcal O(n^2)\) 过不去,但是你发现这里的代价函数 \(w(l,r)\) 有一些比较好的性质,譬如单调性或凹凸…
[学习笔记]wqs二分/DP凸优化 从一个经典问题谈起: 有一个长度为 \(n\) 的序列 \(a\),要求找出恰好 \(k\) 个不相交的连续子序列,使得这 \(k\) 个序列的和最大 \(1 \leq k \leq n \leq 10^5, -10^9 \leq a_i \leq 10^9\) 先假装都会 \(1 \leq k \leq n \leq 1000\) 的 \(dp\) 做法以及 \(k = 1\) 的子问题 实际上这个问题还可以是个费用流模型: 对于序列中每一个点 \(i\)…
题目描述 小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的迷你挑战. 游戏中有一个叫做“LCT” 的挑战,它的规则是这样子的:现在有一个N 个点的 树(Tree),每条边有一个整数边权vi ,若vi >= 0,表示走这条边会获得vi 的收益:若vi < 0 ,则表示走这条边需要支付- vi 的过路费.小L 需要控制主角Link 切掉(Cut)树上的 恰好K 条边,然后再连接 K 条边权为 0 的边…
把状态看成层,每层决策单调性处理 题目描述 题目大意 众所周知,贞鱼是一种高智商水生动物.不过他们到了陆地上智商会减半.这不?他们遇到了大麻烦!n只贞鱼到陆地上乘车,现在有k辆汽车可以租用.由于贞鱼们并不能在陆地上自由行走,一辆车只能载一段连续的贞鱼.贞鱼们互相有着深深的怨念,每一对贞鱼之间有怨气值.第i只贞鱼与第j只贞鱼的怨气值记为Yij,且Yij=Yji,Yii=0.每辆车载重不限,但是每一对在同辆车中的贞鱼都会产生怨气值.当然,超级贞鱼zzp长者希望怨气值的总和最小.不过他智商已经减半,想…
LINK:CF321E Ciel and Gondolas 很少遇到这么有意思的题目了.虽然很套路.. 容易想到dp \(f_{i,j}\)表示前i段分了j段的最小值 转移需要维护一个\(cost(i,j)\) 暴力显然不太行 不过暴力枚举决策的话 可以预处理前缀和线性推出. 显然想要优化决策的话第一步就需要O(1)求出\(cost(i,j)\) 经过画图 可以发现预处理出\(g[i][j]\)表示从\((1,1)\)到\((i,j)\)这个矩形中的点值和 和 \(sum_i\)表示\((1,1…
从一个题带入:[八省联考2018]林克卡特树lct——WQS二分 比较详细的: 题解 P4383 [[八省联考2018]林克卡特树lct] 简单总结和补充: 条件 凸函数,限制 方法: 二分斜率,找切点横纵坐标,判断k的位置 找切点坐标: 集体-mid*x(证明还是凸函数:f(x+2)-f(x+1)<=f(x+1)-f(x))仍然成立) 每次选择物品有额外代价, 找此时高点就是原凸包切点 为了避免凸包上多点共线并且线的横坐标区域包含k,从而使得不会二分到k, 我们ans不记录符合条件切点的纵坐标…
今天模拟赛有一道林克卡特树,完全没有思路 赛后想了一想,不就是求\(k+1\)条不相交的链,使其权值之和最大嘛,傻了. 有一个最裸的\(DP\),设\(f[i][j][k]\)表示在以\(i\)为根的子树中,选了\(j\)条链,\(k=0\)表示\(i\)不在链上,\(k=1\)表示\(i\)是链的一端,\(k=2\)表示\(i\)在链的中间 这样就随便转移了,就是个\(O(nk^2)\)的树上背包 然后呢,又傻了,这能怎么优化? 我先在这里Orz一下大佬BLUESKY007,没有学过wqs二分…
WQS二分,一种优化一类特殊DP的方法. 很多最优化问题都是形如“一堆物品,取与不取之间有限制.现在规定只取k个,最大/小化总收益”. 这类问题最自然的想法是:设f[i][j]表示前i个取j个的最大收益,转移即可.复杂度O(n^2). 那么,如果在某些情况下,可以通过将问题稍作转化,变成一个不强制选k个的DP,而最后DP出来的最优解一定正好选了k个,那么问题就会简化很多. WQS二分就是基于这个思想. 首先考虑建一个二维坐标系,x轴是选的数的个数,y轴是最大收益,如果这个x-y图像有凸性,那么就…
假设已经linkcut完了树,答案显然是树的直径.那么考虑这条直径在原树中是怎样的.容易想到其是由原树中恰好k+1条点不相交的链(包括单个点)拼接而成的.因为这样的链显然可以通过linkcut拼接起来,而若选择不超过k条链则可能有链不得不被cut拆开,即使不会被拆开也可以通过选择单点来达到恰好k+1条(下设k=k+1). 那么问题变为在树上选择k条点不相交的链使边权和最大.最简单的dp就是设f[i][j]为i子树中选j条链的最大权值,且用一维012状态记录i这个点在子树中的度数,转移类似于一个树…