zoukankan      html  css  js  c++  java
  • wqs二分

    题解:

    室友教了一波wqs二分

    发现还是很神奇的

    先介绍一下这个算法

    首先我们建立直角坐标系

    横坐标代表白色的边的数目

    纵坐标代表花费的价值

    那么我们会发现从中间某个最小的点开始向两边递增

    并且其导数是单调不降的

    那么我们考虑一条直线,当它与我们需要的这个相切的时候

    这条直线在过这个点时在y轴上的截距一定是所有点中最小的

    并且,我们会发现与y轴的交点比当前点的y坐标高了-k*x个

    举个例子 bzoj2654

    这样的话也就是说我们要使得原先的答案+用白边的数目(即x坐标)*-k  最小

    这样就直接对每条白边-k就可以了

    那么这个东西显然可以二分

    另一个例子是 bzoj5311

    这道题感觉可以扩展到其他题目

    我们可以对k段建x轴,花费建y轴

    然后每使用一次操作,花费-k代价

    这样做就可以了

    但为什么这样是对的

    是因为我们保证了

    首先最优显然是分n段

    然后随着分段的减少,答案增加的速度显然是不降的

    否则如过降了我之前就可以只增加这么点(如果用了上一次合成的那这一次也一定会更多)

  • 相关阅读:
    C++ STL list
    1159 Palindrome
    3070 Fibonacci
    1458 Common Subsequence
    git工具之重写历史
    git工具之修订版本(revision)选择
    git工具之使用git调试
    程序员也要听歌啊 写写歌词~(毛不易)《借》《消愁》《像我这样的人》
    git基本命令讲解
    git工作原理
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/9022552.html
Copyright © 2011-2022 走看看