zoukankan      html  css  js  c++  java
  • wqs二分/带权二分/凸优化 详解

    前置芝士

    基础二分+基础DP

    算法流程

    wqs二分是一个神奇的东西,经常用来把限制条件转化为二分来降低时间复杂度。

    常见类型:在满足A物品强制选择了m个情况下总价值最大

    如果不考虑 选择了m个 这个条件,我们只考虑总价值最大,我们能够得到一个时间复杂度比较优秀的算法。

    现在考虑二分一下A物品的额外代价(可正可负),修改A的代价后重新进行刚才的算法,顺便记录一下价值最大的情况下选择了多少个A。

    然后根据选择了多少个A来调整二分边界。

    最后最优情况是选择k个A时,我们把额外代价删去就是正确代价

    很多时候需要二分到小数,而且需要卡精度, 正确性有的时候还需要多考虑考虑。

    证明

    这个大佬证明的很详细

    当然你也可以看一下我这个(滑稽)

    设g(i)是选i个A的最优总价值,i为横坐标,g(i)为纵坐标作图。

    我们要求的是g(m)

    我们二分的就是直线斜率k(就是额外代价,至于为啥先往下看),如下

    当k合适时,只有被切点为m,直线截距最大,设截距为f(i)

    f(i)=g(i)-ki,如下图

    把ki分配到i个物品上,就相当于给每个物品附加上了k的额外代价

    很容易就能求出f的最大值

    g(i)=f(i)+ki,我们根据f(i)取最大值的时候的i和m的大小调整二分

    练习题

    题单

    P2619 [国家集训队]Tree I挺简单一道题,这道题貌似可以通过一些神奇操作不用二分到小数,但我看不懂证明(跪了)

    P4983 忘情

    一顿操作猛如虎,一化式子二百五,wqs二分+斜率优化DP,不会斜率优化DP的建议先学一下

    P5308 [COCI2019] Quiz

    wqs二分+斜率优化DP

    P4383 [八省联考2018]林克卡特树

  • 相关阅读:
    【js】replace()
    【js】indexOf()
    【js】sort()
    【js】typeof与instanceof
    【js】with 语句
    跳出框架iframe的操作语句
    Mongodb启动命令mongod参数说明
    ERROR: child process failed, exited with error number 100
    SELECT控件add方法 ie 类型不匹配
    Red hat linux ping: unknown host www.baidu.com
  • 原文地址:https://www.cnblogs.com/wljss/p/14974183.html
Copyright © 2011-2022 走看看