这东西好难啊……(指洛谷评分)
首先呢,这玩意也叫做什么带权二分之类的,用来优化dp。
就是我们需要求一个在什么什么限制下的最优,然后通过调整奇奇怪怪的东西使得最优的时候恰好满足条件,总之是一个十分玄学的东西了!
什么时候可以用呢?需要的是答案是凸包。
而啥又是凸包呢?
拿个例题,就比如说有个数列,分成k段,每段价值是 ((1 + sum a_i)^2) ,求最小价值。
我们设 (f_i) 为分成 i 段时候的最小价值,然后令点坐标为 ((i,f_i)) 可以发现他是一个凸包,为什么咱也不知道,也不太会证。
那么我们怎么求出这个凸包呢?求不出来呀,不然咱干啥来了是吧。
我们需要做奇奇怪怪的调整,也就是对于每一段,我们给他弄上一个额外的权值上去,然后进行调整,使得答案恰好符合性质。
我们设搞上去的奇怪的权值为b,那么实际上原先的那些 ((i,f_i)) 都变成了 ((i,f_i + ib)) 。对吧,到这里应该都挺好理解。
把图弄上去(没找到做图工具)
会发现这个 (f_i + i*b) 可以看做原图像与直线 (y = -bx) 之间夹的高度。
那么怎么着这个我们令 (f_i + i*b = k) ,也就是过凸包上一点 ((i,f_i)) 的一条斜率为 (-b) 的直线 (y = -bx + k) 。要求其截距尽可能的小。那么就是直线与凸包相切的时候!
那么我们二分斜率,正常做dp,看一下结果时候的状态在这里是分了多少段,就说明这条直线与哪个位置相切,继续二分就可以啦!
感觉还是很玄学呢~