• C++程序算法题----木材加工


    题目

    木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目是给定了。当然,我们希望得到的小段越长越好,你的任务是计算能够得到的小段木头的最大长度。

    木头长度的单位是厘米。原木的长度都是正整数,我们要求切割得到的小段木头的长度也要求是正整数。

    Input

    第一行是两个正整数N和K(1 ≤ N ≤ 10000, 1 ≤ K ≤ 10000),N是原木的数目,K是需要得到的小段的数目。

    接下来的N行,每行有一个1到10000之间的正整数,表示一根原木的长度。

    Output

    输出能够切割得到的小段的最大长度。如果连1厘米长的小段都切不出来,输出"0"。

    Sample Input

    3 7

    232

    124

    456

    Sample Output

    114

    思路:

    刚开始用的暴力搜索,结果时间超时。最后朋友告诉我用二分法。具体思想二分法的思想读者自己查找资料阅读。

    • 1、左值为0,右值为数组最大值+x (x可以取任何值,一般取1-100即可)
    • 2、最后输出最大切割长度为右值-1

    代码:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int main(){
        int N,K;
        cin>>N>>K;
        int wood[10000];
        for(int i=0;i<N;i++){
            cin>>wood[i];
        }
        int lef = 0;
        int max_cut = 0;
        // 升序
        sort(wood,wood+N);
        int rig = wood[N-1]+1;
        // 二分法
        while(lef<rig){
            int sum = 0;
            int mid = (rig+lef)/2;
            if(mid==0){
                break;
            }
            for(int i=0;i<N;i++){
                sum += wood[i]/mid;
            }
            if(sum>=K){
                lef = mid+1;
            }else{
                rig = mid;
            }
        }
        cout<<rig-1;
    }
    

    运行结果:

  • 相关阅读:
    Vue.js-项目目录结构解析
    Vue.js-创建Vue项目(Vue项目初始化)并不是用Webstrom创建,只是用Webstrom打开
    Node.js-npm安装包目录修改
    Node.js-Webstorm2018配置nodejs
    Node.js-ReferenceError: _filename is not defined
    cas系列-自定义异常提示(五)
    cas系列-cas登出(四)
    cas系列-cas REST协议(三)
    maven引入第三方jar包
    持续api管理翻译
  • 原文地址:https://www.cnblogs.com/yangxiao-/p/13690168.html
Copyright © 2020-2023  润新知