斜率优化DP
我们经常写DP时,我们的代码会超时 而再化简状态转移方程或则另想方法通常不容易 于是 我们 大佬们变想出了各种优化 这次的斜率优化便是其中一种 什么是斜率优化 表示一条直线(或曲线的切线)关于(横)坐标轴倾斜程度的量。它通常用直线(或曲线的切线)与(横)坐标轴夹角的正切,或两点的纵坐标之差与横坐标之差的比来表示。 又称“角系数”,是一条直线对于横坐标轴正向夹角的正切,反映直线对水平面的倾斜度。.一条直线与某平面直角坐标系横坐标轴正半轴方向所成的角的正切值即该直线相对于该坐标系的斜率.如果直线与x轴互相垂直,直角的正切值无穷大,故此直线不存在斜率。当直线L的斜率存在时,对于一次函数y=kx+b,(斜截式)k即该函数图像的斜率。—— 萌娘 百度百科 总之我们只需要知道 斜率 \(k=\frac{x_i-x_j}{y_i-y_j}\) 判断 对于DP中最后一层循环 取j还是取k更优(不妨设j<k) 如果 当 \(f(j) + s*g(j)<f(k)+s*g(k)\) 时j更优 否则 \(k\) 更优 可以变形为 \(\frac{f(j)-f(k)}{g(k)-g(j)}<s\) (如果g(k)>g(j))这里我们假设如此 实际题目中需证明 反一下 \(\frac{f(k)-f(j)}{g(k)-g(j)}>s\) 得到类似的式子就可以采用斜率优化啦 前置知识 单调队列,DP 具体方式