浅谈代数法斜率优化

我一般采用的方法是 截距式优化。

更快速 更正轨的是采用代数法进行斜率优化 这种方法 使用较多且使用范围广泛。

注意:斜率优化和决策单调性 含义不相同 决策单调性一般是四边形不等式优化出来的结果。

而斜率优化只是在解决一些特定问题寻找最优决策时的优化。

通常题目可能可以同时进行斜率优化或决策单调性优化 但决策单调性优化有下界复杂度Qlog 而斜率优化如果斜率单调通常可以使O(Q)的。

LINK:CF631E Product Sum

对于一个数列我们定义其代价为 \(\sum_{i=1}{n}i\cdot a_i\)

可以将某个i交换到j 使得j之后的数字往后推形成的新的序列最大。

显然我们可以\(n^2\)暴力之后O(1)算出贡献。但是这不够优秀。

i可以向前也可以向后 我们先考虑向前的方向。显然设f[i]表示i和1~i这些位置中的一个交换得到的最大价值。

设原本的初始值为m.那么f[i]可以表示 换过后的值和初始值的差。

\(f_i=(j-i)\cdot a_i+sum_{i-1}-sum_{j-1}\)

这个时候一般是要对比一下两个决策 再来一个决策k \(1\leq k<j\)

\(f_i=(k-i)\cdot a_i+sum_{i-1}-sum_{k-1}\)

我们可以让他们来一个 大小关系的比较看能得出什么 假设j决策优于k决策。

显然有 \((j-i)\cdot a_i+sum_{i-1}-sum_{j-1}\geq (k-i)\cdot a_i+sum_{i-1}-sum_{k-1}\)

化简一下 \((j-k)\cdot a_i\geq sum_{j-1}-sum_{k-1}\to a_i\geq \frac{sum_{j-1}-sum_{k-1}}{j-k}\)

到这里 可以发现右边 神似我们的斜率式子 也就是 在一个二维坐标系中我们以w为下标 \(sum_{w-1}\)为总坐标

右边其实是我们坐标系中的一个两点的斜率 也同样说明了 如果我们的\(a_i\)大于这个斜率说明了j是比k优的的。

此时 如果只有一个斜率没的说比一下即可 有三个点的时候 我们可以来分析一下他们之间的关系 我分析的话过于抽象 可以自己分析 j1,j2,j3看一下他们有什么关系。

可以发现上凸包一定不优策略 我们删掉一些点形成下凸 斜率单调递增。

接下来直接在凸包上线性规划即可 由于这道题 ai不单调 所以需要在凸包上二分。

反着的过程也同样如此。

其实 代数法优化的优越性 这道题没体现出来 但是简洁性还是很棒的。

猜你喜欢

转载自www.cnblogs.com/chdy/p/12503060.html