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.最大化平均值

  • 相关阅读:
    iOS开发-文件管理
    MagicalRecord
    NSPredicate的
    Objective-C文件和目录操作,IOS文件操作,NSFileManager使用文件操作
    iOS 开发者必不可少的 75 个工具
    UITableView 删除cell
    手势
    随机数
    PPT2016同时播放多个视频
    MATLAB运行时,弹出图片框影响电脑使用
  • 原文地址:https://www.cnblogs.com/wangkaipeng/p/6479703.html
Copyright © 2011-2022 走看看