枚举算法实践2-切割木棍 c++
题目描述
我们有n根的木棍。现在从这些木棍中切割出来m条长度相同的木棍,问这m根木棍最长有多长?
输入数据
- 第一行输入两个数字,n和m n(1<=n<=1000)为木棍数目 m(1<=m<=1000)为需要切割出的相同长度的木棍数目
- 随后n个正整数,表示原始木棍的长度(<=10000)
输出数据
每组输出一行结果,表示切割后绳子的最长长度(保留两位小数)
样例输入
4 5
5 6 7 8
样例输出
4.00
初始思路
- 因为要求切割的最大长度,本来想着从木棍长度中找到最大的长度,不断递减向下寻找,直到能切割的数目>= m。!不过不可以,因为切割的长度极有可能不为整数。
正解思路
- 明确切割木棍的长度最粗略的范围就是0到当前木棍中最长的那个
- 明确范围之后,我们就可以使用二分查找了(因为数据是有序的)
- 每一次查找要计算 以当前mid指向的长度 切割的 木棍数目num
- 若num 大于等于m(想要的数目) 说明木棍长度小了 所以要更新left为mid
- 反之 更新 right 为mid
- 直到left 等于right时,就找到了满足当前条件的最长的切割长度了
代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cmath> //round四舍五入
using namespace std;
int main()
{int n, m;vector<int> lens;cin >> n >> m;for (int i = 0; i < n; i++){int temp;cin >> temp;lens.push_back(temp);}auto max = max_element(lens.begin(), lens.end()); //max_element 返回的是迭代器double l = 0, r = *max; //能切割的木棒长度 最粗略的范围就是0到当前木棒中最大的double mid;while (l + 0.01 < r) //不断更新范围 直到 l = r = 最佳解{int num = 0;mid = round(((l + r) / 2.00) * 100) / 100.00; //保证精度// float middd = round(l + r) / 2.00; //不可以 (4+4.5)=4.5for (int i = 0; i < n; i++)num += (int)(lens[i] / mid); //针对当前长度 看每个lens能切割成多少个if (num >= m) //当前的切割 得到的木棍多 说明当前的切割长度小了l = mid;elser = mid;}printf("%.2f", l);system("pause");return 0;
}
补充
- mid = round(((l + r) / 2.00) * 100) / 100.00; 为了保证精度到小数点后两位
- num += (int)(lens[i] / mid); 因为木棍切割只能向下取整,所以int的除法刚好合适
- max_element() 返回容器中最大值的迭代器,所以输出值的话要对其取 *
- 对于格式化的输入和输出,scanf 和 printf更方便
- 若文章存在问题,还请各位大佬批评指正,共同进步。
枚举算法实践2-切割木棍 c++相关推荐
- 枚举算法实践3-Lucky number c++
题目描述 李老师的lucky number 是3,5和7,他爱屋及乌,还把所有质因数只有3,5,7的数字认定为lucky number,比如9, 15, 21, 25等等.请聪明的你帮忙算一算小于等于 ...
- 求解二维矩形 Packing 问题的一种优美度枚举 算法的个人心得1
求解二维矩形 Packing 问题的一种优美度枚举 算法的个人心得 个人思考: 10.14: 提出了基于 "角区"的基本算法 什么是角区? 定义4 (角区) 矩形框中由块或者矩形框 ...
- 深度学习算法实践(基于Theano和TensorFlow)
深度学习算法实践(基于Theano和TensorFlow) 闫涛 周琦 著 ISBN:9787121337932 包装:平装 开本:16开 用纸:胶版纸 正文语种:中文 出版社:电子工业出版社 出版时 ...
- 好程序员web前端分享javascript枚举算法
好程序员web前端分享javascript枚举算法,题目:在1,2,3,4,5 五个数中,我们随机选取 3个数.问有多少种取法?并且把每种取出数的方法列举出来. 乍看这道题,其实感觉没什么难度.三个f ...
- 人脸验证 DeepID 算法实践
人脸验证 DeepID 算法实践 4,610 次阅读 - 文章 作者:雨石 出处:雨石的博客 目前人脸验证算法可以说是DeepID最强,本文使用theano对DeepID进行实现.关于deepid的 ...
- SDCC 2015算法专场札记:知名互联网公司的算法实践
SDCC 2015算法专场札记:知名互联网公司的算法实践 发表于4小时前|526次阅读| 来源作者投稿|0 条评论| 作者张俊林 SDCC算法架构大数据京东腾讯 摘要:11月21日,为期三天的SDCC ...
- 实时通信服务中的语音解混响算法实践
导读: 随着音视频通信会议越来越普及,与会各方在不同环境中遇到了越来越明显且差异的混响场景,譬如大会议室场景.玻璃会议室场景和小房间且隔音材料不佳场景等.为了保证更好的听音可懂度和舒适度,通信中的语音 ...
- 1.Python算法之枚举算法
1.什么是枚举算法? 枚举算法也叫穷举算法,最大特点是在面对任何情况时会尝试每一种解决方法.在进行归纳推力时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么这个结论是可靠的,这种归纳方 ...
- 阿里妈妈品牌广告中的 NLP 算法实践
导读:本次分享的主题为阿里妈妈品牌广告中的 NLP 算法实践,主要内容包括: 1. 品牌广告业务模式与技术架构的简要介绍 2. NLP 算法在品牌搜索广告中的实践,以两个具体的算法问题展开:品牌意图识 ...
最新文章
- 阿尔伯塔大学博士毕业论文:基于图结构的自然语言处理
- 有关RSA 命令总结
- 微软雷德蒙德和伦敦地区掀起新一轮裁员 涉及数百人
- 必须要用发展的眼光来看诺基亚和微软的合作
- SDNU 1406.A+B问题(水题)
- 简明 Python 教程学习笔记_7_文件操作(os、shutil、pathlib )
- body里写注释 postman_是时候扔掉 Postman 了,试试 IntelliJ IDEA 自带的高能神器!
- git配置中文乱码_解决git中文乱码问题
- STM32CubeMx配置H7时钟: Frequency searched for is out of range for this vos range
- leecode第三十题(串联所有单词的子串)
- 去除右键菜单中图形属性、图形选项
- 芒果广告不能用百度了,怎么办?
- vscode下报错:No such file or directory fatal error:no input files的一种比较坑爹的可能
- ApowerREC v1.5.6.2 最佳屏幕录像机
- isolated copper:split plane(dgnd) on ground,dead copper delected.copper area is: 2.5e2 sq.mils
- ROS小车PS2遥控器的使用注意事项
- 32位CPU最大支持4G内存
- java并发包JUC
- Nsight system(nsys)
- 了解lammps中NVE/NVT/NPT三种系综的特性和区别