zoukankan      html  css  js  c++  java
  • 搜索1007

    题目大意:

    输入N,K,N代表绳子的个数,K代表要求能够分割成长度相同的K段,求最长能够分割的长度

    解题思路:

    求出N条绳子中最长一条,先尝试一半的长度,如果分割个数小于K,或者大于K,改变长度,继续分割

    代码:

    #include <iostream>
    #include <algorithm>
    #include <iomanip>
    using namespace std;
    double a[10001];
    int  dp(double m,int N,int K)
    {
        int sum=0;
        for(int i=0;i<N;i++)
        sum+=(int)(a[i]/m);
        if(sum<K)
        return 0;
        return 1;
    }
    int main()
    {
        int N,K;
        double low,high,mid;
        while(cin>>N>>K)
        {
            if(N==0&&K==0)
            return 0;
            for(int i=0;i<N;i++)
            cin>>a[i];
            sort(a,a+N);
            low=0;high=a[N-1];
            while(high-low>0.0001)
            {
                mid=(low+high)/2;
                if(dp(mid,N,K))
                low=mid;
                else high=mid;
            }
            cout<<setiosflags(ios::fixed)<<setprecision(2)<<mid<<endl;
        }
        return 0;
    }
  • 相关阅读:
    HDU 4325 Contest 3
    HDU 4324 Contest 3
    HDU 4323 Contest 3
    HDU 4321 Contest 3
    HDU 4320 Contest 3
    HDU 4314 Contest 2
    HDU 4313 Contest 2
    HDU 4318 Contest 2
    12-----简单认识下margin
    11-----broder(边框)
  • 原文地址:https://www.cnblogs.com/Sikaozhe/p/5352334.html
Copyright © 2011-2022 走看看