蒟蒻的第一篇学习笔记qwq
wqs二分用于解决此类问题
n个物品,从中选恰好m个,最大化收益。而且你发现,如果没有选m个的限制,这道题是非常好做的。
使用前提
1、恰好选k个,至多至少不行
2、答案满足凸性
什么是凸性?
设选i个物品时的收益为fi
如果把它画成函数,那么它长这样(上凸包)
或者这样(下凸包)
也就是说,每选一个点所额外获得的收益(即fi - fi-1, 在图中表现为斜率)单调递减(或递增)
于是,我们可以二分这个斜率,并快速求出这条线在凸包上的切点会在哪里。
下面是我个人认为比较难理解的地方,以上凸包为例讲解
我们现在已知一个斜率k,那么看图,我们得到 kx + b = f(x), b = f(x) - kx
一般题目中这个b是很好求的(详见后文例题),它表示在这种条件下,若没有取k个的限制,最优解是多少,即“无限制最优”。(因为我们注意到此时b是最高的一个截距)
而且一般此时可以知道x的值,即“取了多少个”。根据它来check此时的mid是否合法
那么我们就可以很轻松地求出f(x)
最后注意一个细节,求最终答案的时候是f(x) = ans * m + b,目的是防止这样的情况出现。
感性理解
就是给受到题目限制的特殊点加一个权值,通过增大或减小权值来使得取到的特殊点个数变多或者变少
那么我们就可以通过二分来确定这个过程,最后通过mid和m求出答案即可
和费用流的关系
这是稍进阶一点的,一般模拟费用流会用到。
考虑在费用流中,我们用spfa求增广路,每次找到的都是费用最小的路径,也就是说,我们每次找到的最短路费用单调不降。
既然增量单调不降低,那么总费用就是一个下凸包,可以使用wqs二分求解
例题:
就不写题解了,毕竟题解区写的很详细了