WQS二分

WQS二分

是一种常用于降维的手段

如果题目中要求选择某种物品数量恰好为(k),我们可以通过(WQS)二分加维护最优解选择物品数量的方式降低时间和空间复杂度

以例题来讲解

例题

[APIO/CTSC 2007]数据备份

zhoutb2333太强辣

一般解法是反悔贪心,今天不讲

显然的性质,每个建筑肯定和自己相邻的建筑连线

那么设计一个比较暴力的(dp)状态(f[i][j][0/1])表示前(i)个建筑连了(j)条线,当前建筑有没有和上一个建筑连线

转移很好想

(f[i][j][0]=min(f[i-1][j][0],f[i-1][j][1]))

(f[i][j][1]=f[i-1][j-1][0]+pos[i]-pos[i-1])

我们发现空间不够

我们设(h[x]=min(f[n][x][0],f[n][x][1])),即选(x)条线段时的答案

我们将((x,h[x]))在二维数轴上描出来,会发现是一个斜率递增的下凸壳(因为靠前选的线段肯定是最短的,后面加的线段会越来越长)

考虑某个点((x,h[x])),被一条斜率为(k)的直线相切,那么如果整个函数减去横坐标乘(k),这个点一定是整个函数中最靠下的

感性理解,前面点斜率小于(k),而后面的点斜率大于(k)

所以此时我们只要单纯的求函数最低点的答案

但是我们不知道(k)点处的斜率

不过我们知道斜率是单调的

那么我们考虑二分,每次算出最优解的同时算出最优解连了多少条线段

小于(k)就把斜率变大,大于(k)就把斜率变小

复杂度(O(nlogn))级别

原文地址:https://www.cnblogs.com/knife-rose/p/12611943.html