本蒟蒻由于脑子笨,学wqs二分学了老长时间才搞懂,特此写篇文章加深印象。
WQS二分本质上是一种带权二分,最早由大佬 王钦石 提出。其是一个用来解决如下问题的算法:
有 n 个物品,需要从中选取 m 个,存在某种限制来计算选中物品的价值,求最大/小的价值。
使用这种技巧需要题目满足两个性质:
1. 设 表示从 n 个物品中选取 i 个的最优解,那么我们就可以得到点对
,我们在图上画出所有
的点对,会发现其一定组成一个凸包(即凸函数) 。
2. 若题目中没有选取 m 个的限制,会十分容易地求得最优解。
我们先将性质1 的图像画出来:
大概就长这样。此时我们用一条斜率为 k 的直线切这个凸包:
如上图,斜率为 k 的直线经过图中不同的点对时其纵截距也不同,但可以发现,该直线与凸包相切时纵截距最大。可以发现 ,假设直线与凸包相切于点 j ,则
。由于性质二,我们会很容易求出
的最大值,所以
的最大值