• 感性理解斜率优化


    考虑这样一个问题:给定数组 ({c_n},{d_n}),求数组 ({f_n}) 满足 (f_i=min_{j<i}{f_j+c_i imes d_j})(c_i,d_i) 可能为负数。

    (i) 从小到大计算 (f_i),并将所有 (j<i)((d_j,f_j)) 放在二维平面上。计算 (f_i),其实就是将平面上每个点的 (y) 加上 (c_i imes x),然后取全局最小的 (y)

    对于平面上的三个点 ((x_1,y_1),(x_2,y_2),(x_3,y_3))(x_1<x_2<x_3)),若 (operatorname{slope}((x_1,y_1),(x_2,y_2))>operatorname{slope}((x_2,y_2),(x_3,y_3))),那么 ((x_2,y_2)) 永远不是最优解。证明显然。

    我们知道,一个下凸壳加上一条直线,仍然是一个下凸壳。于是,我们只需要维护一个支持插入点的下凸壳,计算 (f_i) 时在下凸壳内二分转折点即可。

    一些题目只需要用单调队列维护,是因为其 (d) 数组具有单调性;有的甚至可以做到线性,是因为其 (c,d) 都具有单调性。

    Written by Alan_Zhao
  • 相关阅读:
    Promise推荐
    ES6推荐
    vue学习笔记之项目创建流程
    vue学习笔记之环境搭建
    前端知识小总结3
    前端知识小总结2
    JavaScript语言精粹の笔记
    JavaScript修炼之道の笔记
    移动端及vue相关问题
    组件式开发Web App
  • 原文地址:https://www.cnblogs.com/alan-zhao-2007/p/convex-hull-trick.html
Copyright © 2020-2023  润新知