二分法典例:木棒切割问题

news/2024/7/3 0:10:21

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;
}

结果


http://lihuaxi.xjx100.cn/news/240862.html

相关文章

1044 Shopping in Mars

这题我写了两个二分函数。 BS借用的模板是找到第一个大于等于总价的商品下标&#xff0c;然后返回的是钻石价值和减去商品总价&#xff0c;通过遍历来得到最小的差值&#xff0c;注意遍历的最后一个数字的时候可能会返回负值&#xff0c;所以只有当返回值大于等于0才可以用来竞…

利用Redis进行全页面缓存的简单Demo

2019独角兽企业重金招聘Python工程师标准>>> 使用Redis进行全页面缓存&#xff0c;如何实现呢&#xff1f;本文使用简单的思路来实现这个功能。 一、环境介绍 使用的开源框架主要是springmvc、spring-data-redis、redis开发工具&#xff1a;Intellij IDEA 2017.2.4j…

Java动态代理机制

在Java的动态代理机制中&#xff0c;有两个重要的类。一个是InvocationHandler&#xff0c;另一个是Proxy。InvocationHandler&#xff1a;每一个动态代理类都必须要实现InvocationHandler接口&#xff0c;并且每个代理类的实例都关联到了一个handler&#xff0c;当我们通过代理…

1048 Find Coins(二分法解法)

非常基础的二分法-寻找序列中是否存在某一条件的元素 的应用 AC代码 #include<cstdio> #include<iostream> #include<set> #include<vector> #include<map> #include<algorithm>using namespace std;const int SUP 100000000; const in…

数据库抽取,生成CSV文件导出,CSVUtils工具类

2019独角兽企业重金招聘Python工程师标准>>> 开发背景&#xff1a; 最近一直在忙一个任务调度系统&#xff0c;需求一直没定下来&#xff0c;需求一直变更&#xff0c;调度一直改&#xff0c;往往复复。。。 等这波忙完了可以写一下关于BI这边调度任务的相关问题&am…

数组、字符串对象、Math对象

数组的介绍 数组介绍 概念&#xff1a; 就是将若干个数据以一定的顺序放在一起的一个集合体&#xff0c;整体上就称之为“数组”。数组就是一列数据的有序排列的集合。定义形式&#xff1a; var arr1 new Array(1, 5, 8, 7, 2, 10); //定义了一个数组&#xff0c;其中具有6个数…

1126 Eulerian Path

主要考英语或者数学基础。 一幅连通图的奇点个数为0或2时才能够被一笔画。 连通图的判断用DFS来计数。 连通图0个奇点&#xff1a;Eulerian 连通图2个奇点&#xff1a;semi-Eulerian 非连通图/连通图其他数量的奇点&#xff1a;non-Eulerian AC代码 #include<cstdio&…

linux实现nat转发和内部端口映射

路由机 eth0:114.114.114.114(公网ip)  eth1:192.168.1.1(内网ip) pc1 eth0:192.168.1.2(内网ip)    eth1(拨号ip) pc2 eth0:192.168.1.3(内网ip)    eth1(拨号ip) 1.配置路由机网卡信息 vim /etc/sysconfig/network-scripts/ifcfg-eth1 TYPEEthernet BOOTPROTOstati…