zoukankan      html  css  js  c++  java
  • 疯牛——二分法+贪心

    AC代码:

     1 //2018.2.22
     2 //疯牛(解决最优解问题)
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<cstdio>
     6 #include<cstring>
     7 #include<cmath>
     8 using namespace std;
     9 
    10 const int maxn=100000+10;
    11 int n,c;                  //n表示隔间个数,c表示牛的个数
    12 int a[maxn];              //隔间编号
    13 
    14 bool judge(int x){         //x为最小距离,判断最小距离情况下,符合条件的隔间是否大于牛的数目 
    15     int num=1,tmp=a[0];
    16     for(int i=1;i<n;i++){
    17         if(a[i]-tmp>=x){
    18             num++;
    19             tmp=a[i];
    20             if(num>=c) 
    21                 return true;
    22         }
    23     }
    24     return false;
    25 } 
    26 
    27 void solve(){            //二分法 
    28     int min=0,max=a[n-1]-a[0];
    29     int mid;
    30     while(max>=min){     //重复循环,直到找到最优解 
    31         mid=(min+max)/2;
    32         if(judge(mid)){
    33             min=mid+1;
    34         }else{
    35             max=mid-1;
    36         }    
    37     }
    38     cout<<max<<endl;
    39 } 
    40 
    41 int main(){
    42     while(cin>>n>>c){
    43         for(int i=0;i<n;i++){
    44             cin>>a[i];
    45         }
    46         sort(a,a+n);
    47         solve();
    48     }
    49     return 0;
    50 } 

    解决最优解问题可以套用二分搜索模板,这类问题的关键在于judge()判断函数的选取,其余部分直接套用。

  • 相关阅读:
    python函数
    文件操作
    python列表,元组,字典,集合简介
    python字符串(str)
    python数字类型 or 进制转换
    流程控制
    Python入门
    Python垃圾回收机制
    python简介&下载&安装
    DAY11
  • 原文地址:https://www.cnblogs.com/cxq1126/p/8460277.html
Copyright © 2011-2022 走看看