Input : 输入木棒根数n,要得到的等长木棒数量K,以及n根木棒的长度。

Output : 等长木棒的最大长度。

用二分法求解这道题,首先要找到以得到的等长木棒数量为因变量、等长木棒长度为自变量函数。

int getK(int l){//随着l增大,返回值会减小 int k = 0;for(int i=0;i<n;i++){k += L[i]/l;}return k;
}

其次,最后要找的l是最后一个满足k>=K的长度,不妨转化为第一个满足k<K的l,然后减一。

可以写出二分函数

int BS(int l,int r,int K){int mid;while(l<r){mid = (l+r)/2;if(getK(mid)<K){r = mid;//减小l}else{l = mid+1;//增大l } }return l;
}

完整代码

#include<cstdio>
#include<iostream>
#include<set>using namespace std;const int maxn = 10010;int n,K;//有n根木棒,至少要求得到K根等长的
int L[maxn];int getK(int l){//随着l增大,返回值会减小 int k = 0;for(int i=0;i<n;i++){k += L[i]/l;}return k;
}int BS(int l,int r,int K){int mid;while(l<r){mid = (l+r)/2;if(getK(mid)<K){r = mid;//减小l}else{l = mid+1;//增大l } }return l;
}int main(){cin>>n>>K;for(int i=0;i<n;i++){cin>>L[i];}int l = BS(0,100,K);cout<<"木棒的最大长度为:"<<l-1<<endl;return 0;
}

结果

二分法典例:木棒切割问题相关推荐

  1. 木棒切割问题(***二分法)

    木棒切割问题(算法笔记p134) Note:回顾4.5.1 lower_bound 和upper_bound模板,注意上下界问题 给出N根木棒,长度均已知,现在希望通过切割它们来得到至少K段长度相等的 ...

  2. 二分法:木棒切割问题

    问题描述: 问题模板: 寻找有序序列第一个满足某条件的元素的位置: (这个条件是从序列左起到右,从不满足条件到开始满足.) //二分区间为左闭右闭的[left,right],初值必须能覆盖解的所有可能 ...

  3. 数据结构与算法——二分查找与二叉查找树汇总整理

    目录 预备知识:二分查找基础知识 例1:插入位置(easy) (二分查找) 例2:区间查找(medium)(二分查找) 例3:旋转数组查找(medium)(二分查找) 预备知识:二叉查找(排序)树基础 ...

  4. 二分——切绳子(C++)

    题目描述: 有 n 条绳子,它们的长度分别为 Li,如果从它们中切割出 m 条长度相同的绳子,这 m 条绳子每条最长能有多长? 输入格式: 第一行两个整数 n和 m. 接下来 n行,每行一个实数,描述 ...

  5. 二分查找 二分答案 万字详解,超多例题,带你学透二分。

    很多人对二分感到很苦恼,很困惑,可能是因为二分的边界很难掌握,也许是判断条件难写- 然而,很幸运,你找到了这篇文章,仔细看下去,这篇文章将带你学透二分!!! 二分可以简单分为二分查找与二分答案. 可能 ...

  6. 算法笔记知识点整理大全

    每次刷题都觉得自己吃了知识点不全,基础不牢固的亏,刷题的时候目标也不明确,于是看完了算法笔记并把知识点归纳了一下,当然直接看书会更加详细,这个归纳只是学习时加深印象以及方便自己之后回顾而已:之后刷题大 ...

  7. 《算法笔记》——笔记

    算法笔记 胡凡 曾磊 主编 机械工业出版社 文章目录 算法笔记 C/C++快速入门 提醒 memset sscanf与sprintf 引用 浮点数的比较 圆周率 复杂度 黑盒测试 入门篇(1)--入门 ...

  8. c语言分治法求众数重数_五大常见算法策略之——递归与分治策略

    递归与分治策略 递归与分治策略是五大常见算法策略之一,分治策略的思想就是 分而治之 ,即先将一个规模较大的大问题分解成若干个规模较小的小问题,再对这些小问题进行解决,得到的解,在将其组合起来得到最终的 ...

  9. [细读经典]Megatron论文和代码详细分析(1)

    [细读经典]Megatron论文和代码详细分析(1) 导航: 迷途小书僮:[细读经典]Megatron论文和代码详细分析(2)102 赞同 · 41 评论文章正在上传-重新上传取消 前言 作为一款支持 ...

最新文章

  1. C#之windows桌面软件第九课:汉字串口助手
  2. php防止模拟请求,php防止伪造跨站请求实现程序_PHP教程
  3. 【学习笔记】【C语言】返回指针的函数
  4. Java和SAP ABAP的异常处理
  5. 通过Main的Checkpoint Restore加快Java启动速度
  6. linux 磁盘簇,linux系统exec簇工作原理
  7. 20155220 2016-2017-2《Java程序设计》第五周学习总结
  8. editor.md使用php,Editor.md提示修改
  9. 监控mysql主从同步状态是否异常
  10. GCC 11.1 进行 C++ 多项优化
  11. 小项目--猜年龄游戏
  12. vue mand-mobile按2.0文档默认安装的是1.6.8版本
  13. 误报率、故障检测率、漏报率、虚警率、误警率等指标异同及计算公式
  14. 正则表达式:回车和换行的区别
  15. 华为nova青春版是html手机吗,华为Nova青春版这款手机作为新青年良品:麒麟935+4G+64GB+18W快充...
  16. 【PPP概念股龙头】PPP再迎风口 相关概念股表现格外抢眼(2)
  17. 银户通便捷服务加速金融智能化进程
  18. 1. oralce数据库安装以及简单的SQL语句
  19. Java学到什么程度才算精通?(2),学海无涯
  20. 买笔记本要注意什么呢?

热门文章

  1. HTML封装AJAX请求,在请求里面写登录的逻辑 ajax 网络请求 post
  2. 微信小程序WebSocket实现聊天对话功能完整源码
  3. UILayer的一些属性
  4. 【Android OpenGL ES】阅读hello-gl2代码(二)Java代码
  5. PHP协程:并发 shell_exec
  6. 远程处理Remoting
  7. 走进云计算与虚拟化的底层核心
  8. 微软职位内部推荐-Software Engineer II-News
  9. java静态/动态成员变量、初始化块,父类/子类构造函数执行顺序问题
  10. linux基本命令详解の第一季