zoukankan      html  css  js  c++  java
  • POJ 1064---二分搜索法

    ///2.假定一个解并判断是否可行
    ///POJ1064
    /**
        Q:有N条绳子,长度分别为Li,从中切割出k条长度相同的绳子,
        这K条绳子最长能有多长?保留两位小数
        A:
        二分搜索模型。
        条件C(x):=可以得到K条长度为x的绳子
        问题转变为 求满足C(x)的最大x;lb=0 ub=INF
        问题转变为 如何高效的判断C(x)
    
        1.二分搜索模型:在求最优解问题上的应用
        “求满足条件C(x)的最小x”->若所有的x'>=x也满足C(x),则可用二分搜索来解决
    
    */
    
    #include"iostream"
    #include "cstdio"
    #include "cmath"
    using namespace std;
    
    #define MAX 100010
    #define INF 0x3f3f3f3f
    int N,K;
    double L[MAX];
    bool C(double x)
    {
        int num=0;
        for(int i=0;i<N;i++)
        {
            num+=(int)(L[i]/x);
        }
        return num>=K;
    }
    void solve()
    {
        ///初始化解的范围
        double lb=0.0,ub=INF;
    
        ///重复循环,直到解的范围足够小
        for(int i=1;i<=100;i++)
        {
            double mid=(lb+ub)/2;
            if(C(mid))
                lb=mid;///长度还可以大点
            else
                ub=mid;
        }
        printf("%.2f
    ",floor(ub*100)/100);///保留两位小数处理,ub代表最大符合
    }
    
    int main()
    {
        while(~scanf("%d%d",&N,&K))
        {
            for(int i=0;i<N;i++)
            {
                scanf("%lf",&L[i]);
            }
            solve();
        }
        return 0;
    }
    /**
    4 11
    8.02
    7.43
    4.57
    5.39
    Sample Output
    
    2.00
    */
  • 相关阅读:
    iOS Button选中与取消
    IOS-UIButton的文本与图片的布局
    iOS滑动tableView来改变导航栏的颜色
    Mac下Vim编辑快捷键小结
    iOS 比较版本号大小的方法
    Symbol
    call和apply的区别及用法
    关于高并发
    java.io.IOException: Stream closed 的问题
    通俗易懂的 Java 位操作运算讲解
  • 原文地址:https://www.cnblogs.com/kimsimple/p/7137154.html
Copyright © 2011-2022 走看看