二分法典例:木棒切割问题
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;
}
结果
二分法典例:木棒切割问题相关推荐
- 木棒切割问题(***二分法)
木棒切割问题(算法笔记p134) Note:回顾4.5.1 lower_bound 和upper_bound模板,注意上下界问题 给出N根木棒,长度均已知,现在希望通过切割它们来得到至少K段长度相等的 ...
- 二分法:木棒切割问题
问题描述: 问题模板: 寻找有序序列第一个满足某条件的元素的位置: (这个条件是从序列左起到右,从不满足条件到开始满足.) //二分区间为左闭右闭的[left,right],初值必须能覆盖解的所有可能 ...
- 数据结构与算法——二分查找与二叉查找树汇总整理
目录 预备知识:二分查找基础知识 例1:插入位置(easy) (二分查找) 例2:区间查找(medium)(二分查找) 例3:旋转数组查找(medium)(二分查找) 预备知识:二叉查找(排序)树基础 ...
- 二分——切绳子(C++)
题目描述: 有 n 条绳子,它们的长度分别为 Li,如果从它们中切割出 m 条长度相同的绳子,这 m 条绳子每条最长能有多长? 输入格式: 第一行两个整数 n和 m. 接下来 n行,每行一个实数,描述 ...
- 二分查找 二分答案 万字详解,超多例题,带你学透二分。
很多人对二分感到很苦恼,很困惑,可能是因为二分的边界很难掌握,也许是判断条件难写- 然而,很幸运,你找到了这篇文章,仔细看下去,这篇文章将带你学透二分!!! 二分可以简单分为二分查找与二分答案. 可能 ...
- 算法笔记知识点整理大全
每次刷题都觉得自己吃了知识点不全,基础不牢固的亏,刷题的时候目标也不明确,于是看完了算法笔记并把知识点归纳了一下,当然直接看书会更加详细,这个归纳只是学习时加深印象以及方便自己之后回顾而已:之后刷题大 ...
- 《算法笔记》——笔记
算法笔记 胡凡 曾磊 主编 机械工业出版社 文章目录 算法笔记 C/C++快速入门 提醒 memset sscanf与sprintf 引用 浮点数的比较 圆周率 复杂度 黑盒测试 入门篇(1)--入门 ...
- c语言分治法求众数重数_五大常见算法策略之——递归与分治策略
递归与分治策略 递归与分治策略是五大常见算法策略之一,分治策略的思想就是 分而治之 ,即先将一个规模较大的大问题分解成若干个规模较小的小问题,再对这些小问题进行解决,得到的解,在将其组合起来得到最终的 ...
- [细读经典]Megatron论文和代码详细分析(1)
[细读经典]Megatron论文和代码详细分析(1) 导航: 迷途小书僮:[细读经典]Megatron论文和代码详细分析(2)102 赞同 · 41 评论文章正在上传-重新上传取消 前言 作为一款支持 ...
最新文章
- C#之windows桌面软件第九课:汉字串口助手
- php防止模拟请求,php防止伪造跨站请求实现程序_PHP教程
- 【学习笔记】【C语言】返回指针的函数
- Java和SAP ABAP的异常处理
- 通过Main的Checkpoint Restore加快Java启动速度
- linux 磁盘簇,linux系统exec簇工作原理
- 20155220 2016-2017-2《Java程序设计》第五周学习总结
- editor.md使用php,Editor.md提示修改
- 监控mysql主从同步状态是否异常
- GCC 11.1 进行 C++ 多项优化
- 小项目--猜年龄游戏
- vue mand-mobile按2.0文档默认安装的是1.6.8版本
- 误报率、故障检测率、漏报率、虚警率、误警率等指标异同及计算公式
- 正则表达式:回车和换行的区别
- 华为nova青春版是html手机吗,华为Nova青春版这款手机作为新青年良品:麒麟935+4G+64GB+18W快充...
- 【PPP概念股龙头】PPP再迎风口 相关概念股表现格外抢眼(2)
- 银户通便捷服务加速金融智能化进程
- 1. oralce数据库安装以及简单的SQL语句
- Java学到什么程度才算精通?(2),学海无涯
- 买笔记本要注意什么呢?