WQS二分
是一种常用于降维的手段
如果题目中要求选择某种物品数量恰好为(k),我们可以通过(WQS)二分加维护最优解选择物品数量的方式降低时间和空间复杂度
以例题来讲解
例题
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))级别