zoukankan      html  css  js  c++  java
  • wqs二分随便乱写

    这东西好难啊……(指洛谷评分)

    首先呢,这玩意也叫做什么带权二分之类的,用来优化dp。

    就是我们需要求一个在什么什么限制下的最优,然后通过调整奇奇怪怪的东西使得最优的时候恰好满足条件,总之是一个十分玄学的东西了!

    什么时候可以用呢?需要的是答案是凸包。

    而啥又是凸包呢?

    拿个例题,就比如说有个数列,分成k段,每段价值是 ((1 + sum a_i)^2) ,求最小价值。

    我们设 (f_i) 为分成 i 段时候的最小价值,然后令点坐标为 ((i,f_i)) 可以发现他是一个凸包,为什么咱也不知道,也不太会证。

    那么我们怎么求出这个凸包呢?求不出来呀,不然咱干啥来了是吧。

    我们需要做奇奇怪怪的调整,也就是对于每一段,我们给他弄上一个额外的权值上去,然后进行调整,使得答案恰好符合性质。

    我们设搞上去的奇怪的权值为b,那么实际上原先的那些 ((i,f_i)) 都变成了 ((i,f_i + ib)) 。对吧,到这里应该都挺好理解。

    把图弄上去(没找到做图工具)

    会发现这个 (f_i + i*b) 可以看做原图像与直线 (y = -bx) 之间夹的高度。

    那么怎么着这个我们令 (f_i + i*b = k) ,也就是过凸包上一点 ((i,f_i)) 的一条斜率为 (-b) 的直线 (y = -bx + k) 。要求其截距尽可能的小。那么就是直线与凸包相切的时候!

    那么我们二分斜率,正常做dp,看一下结果时候的状态在这里是分了多少段,就说明这条直线与哪个位置相切,继续二分就可以啦!

    感觉还是很玄学呢~

  • 相关阅读:
    ural(Timus) 1019 Line Painting
    ACMICPC Live Archive 2031 Dance Dance Revolution
    poj 3321 Apple Tree
    其他OJ 树型DP 选课
    poj 3548 Restoring the digits
    ACMICPC Live Archive 3031 Cable TV Network
    递归循环获取指定节点下面的所有子节点
    手动触发asp.net页面验证控件事件
    子级Repeater获取父级Repeater绑定项的值
    没有列名的数据绑定
  • 原文地址:https://www.cnblogs.com/nao-nao/p/14876324.html
Copyright © 2011-2022 走看看