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

    二分搜索法,是通过不断缩小解可能存在的范围,从而求得问题最优解的方法。

    1.从有序数组中查找某个值

    STL以lower_bound函数的形式实现了二分搜索。类似方法还有upper_bound

    2.假定一个解并判断是否可行

    注意输出答案的格式

    3.最大化最小值

    找到最大的d使得最近的两头牛的距离不小于d

    (1)对牛舍的位置x排序

    (2)第一头牛进x0

    (3)若第i头放入了xj,则第i+1头放入满足xk-xj>=d的最小的xk

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<math.h>
     4 #include<algorithm>
     5 using namespace std;
     6 typedef long long ll;
     7 int n,m;
     8 double L[100005];
     9 bool judge(int len)
    10 {
    11     int last=0;
    12     for(int i=1;i<m;i++)
    13     {
    14         int cur=last+1;
    15         while(cur<n&&L[cur]-L[last]<len) cur++;
    16         if(cur==n) return false;
    17         last=cur;
    18     }
    19     return true;
    20 }
    21 int main()
    22 {
    23     cin>>n>>m;
    24     for(int i=0;i<n;i++) cin>>L[i];
    25     //sort(L,L+n);
    26     int l=0,r=100000005;
    27     while(r-l>1)
    28     {
    29         int mid=(l+r)/2;
    30         if(judge(mid)) l=mid;
    31         else r=mid;
    32     }
    33     cout<<l<<endl;
    34     return 0;
    35 }
    View Code

    4.最大化平均值

  • 相关阅读:
    【Linux】没有网的情况下如何安装GCC
    【PL/SQL】PLSQL Developer注册码
    【JS】字符串操作
    【java】svn显示&#215;
    线段树
    病毒感染者
    并查集
    最小的N个和(堆)
    priority_queue的用法
    打印杨辉三角
  • 原文地址:https://www.cnblogs.com/wangkaipeng/p/6479703.html
Copyright © 2011-2022 走看看