馏栩梓 发表于 2025-6-9 18:49:46

浅谈斜率优化

浅谈斜率优化

概论

列出状态转移方程,如果能化简为以下的形式:

\=\min/\max(c+d+C)\]
此时我们就可以利用单调队列优化从做 \(O(n^2)\) 到 \(O(n)\) 的复杂度。
现在考虑更一般的情况,如果化简为以下形式:

\=\min/\max(a\cdot b+c+d+C)\]
此时单调队列优化就不再适用,就需要使用斜率优化。
斜率优化的思想就是通过剔除一些不可能成为最优解的决策点,使剩下的决策点形成一个凸包,再使用单调队列、二分、平衡树、CDQ 分治或者李超线段树来快速转移。
理论讲解

斜率优化有两种理解方式:
代数法

设决策点 \(j_2\) 优于 \(j_1\)。
则有:(\(\) 对应 \(\min\))

\\cdot b+c+d+Ca\cdot b+c+d+C\]
化简得:

\\cdot b+da\cdot b+d\]
令 \(Y(x)=-d\),\(X(x)=b\),\(k=a\),再让 \(X(j_2)>X(j_1)\)。
移项得(不等号要变号):

\;                t = t + t;                f = f + f;        }        memset(dp, 0x7f, sizeof dp);        dp = 0;        for (int i = 1; i > s;        for (int i = 1; i > t >> c;                t += t;                c += c;        }        int hh = 0, tt = 0;        q = 0;        for (int i = 1; i > s;        for (int i = 1; i > t >> c;                t += t;                c += c;        }        int hh = 0, tt = 0;        q = 0;        for (int i = 1; i > 1;                        if (dp] - dp] > (t + s) * (c] - c]))                        {                                r = mid;                        }                        else                        {                                l = mid + 1;                        }                }                dp = dp] + t * (c - c]) + s * (c - c]);                while (hh < tt && (dp] - dp]) * (c - c]) >= (dp - dp]) * (c] - c]))                {                        tt--;                }                q[++tt] = i;        }        coutn;        for (int i = 1; i > h;        }        for (int i = 1; i > w;                w = w + w;        }        p.k = -2 * h, p.b = h * h - w;        t.update(1, 1, M, 1);        for (int i = 2; i > m;        for (int i = 1; i > a;                a += a;                dp = a * a;        }        for (int j = 2; j > n >> ans;        for (int i = 1; i > a >> b >> r;                c = d = a / b;        }        sort(c + 1, c + n + 1);        for (int i = 1; i > m >> a >> b >> c;        for (int i = 1; i > tr.x >> tr.y >> tr.p >> tr.q;        }        sort(tr + 1, tr + m + 1, cmp);        q.insert(0);        for (int i = 1; i

愆蟠唉 发表于 2025-10-27 09:31:41

前排留名,哈哈哈

旁拮猾 发表于 2025-11-23 02:09:51

鼓励转贴优秀软件安全工具和文档!

扫恢怯 发表于 2025-12-25 10:45:13

很好很强大我过来先占个楼 待编辑

贼瘁 发表于 2026-1-14 02:44:22

喜欢鼓捣这些软件,现在用得少,谢谢分享!

屠焘 发表于 2026-1-18 05:21:25

不错,里面软件多更新就更好了

辅箱肇 发表于 2026-1-18 11:06:01

懂技术并乐意极积无私分享的人越来越少。珍惜

寿爹座 发表于 2026-1-22 09:32:17

yyds。多谢分享

揉幽递 发表于 2026-1-23 08:19:55

新版吗?好像是停更了吧。

坡琨 发表于 2026-1-24 09:34:19

感谢分享

钨哄魁 发表于 2026-1-25 08:28:03

用心讨论,共获提升!

左优扬 发表于 2026-1-26 06:08:18

谢谢分享,试用一下

袁曼妮 发表于 2026-1-27 02:42:27

这个有用。

筒霓暄 发表于 2026-2-1 04:01:49

鼓励转贴优秀软件安全工具和文档!

襁壮鸢 发表于 2026-2-3 08:42:54

分享、互助 让互联网精神温暖你我

呵桢 发表于 2026-2-6 11:59:13

这个有用。

骆贵 发表于 2026-2-6 12:23:39

过来提前占个楼

缍米 发表于 2026-2-7 03:05:12

不错,里面软件多更新就更好了

申倩语 发表于 2026-2-8 18:26:52

很好很强大我过来先占个楼 待编辑

晾棋砷 发表于 2026-2-8 23:53:41

不错,里面软件多更新就更好了
页: [1] 2
查看完整版本: 浅谈斜率优化