二分答案

  • 二分答案:

    • 基本要点:

      • 二分答案就是将暴力找答案的过程变为二分找答案
      • 将最优化问题转变为可行性问题
      • 二分的答案要求有界性/单调性/二段性
      • 主要用于解决最大值最小化/最小值最大化问题
      • check函数求y一般用贪心
    • 基础模板:

      //最大化答案模板:
      bool check(int x){
          ...//计算y
          //返回可行区间
          return y<=m;//y随答案单调递减
         return y>=m;//y随答案单调递增
      }
      int bianryfind(){
          int l=下界-1,r=上界+1;
         while(l+1<r){
              int mid=r+l>>1;
            if(check(mid) l=mid;//左端往大跳
            else r=mid;
         }
         return l;
      }
      
      //最小化答案模板:
      bool check(int x){
          ...//计算y
          //返回可行区间
          return y<=m;//y随答案单调递减
         return y>=m;//y随答案单调递增
      }
      int bianryfind(){
          int l=下界-1,r=上界+1;
         while(l+1<r){
              int mid=r+l>>1;
            if(check(mid) r=mid;//右端往小跳
            else l=mid;
         }
         return r;
      }
      
    • 题型归纳:

      [[Luogu P1182 数列分段 Section II]]
      [[Luogu P2678 跳石头]]
      [[Luogu P1843 奶牛晒衣服]]
      [[Luogu Tracking Segments]]
      [[Luogu ABC293F Zero or One]]

posted on 2023-07-23 15:41  MoiLip  阅读(61)  评论(0编辑  收藏  举报

导航