题目大意
给定N个木头及其长度,要求把这些木头切割成M块长度相同的小段木头(木头有可能有剩余),求小段木头的最大值。
输入#1
3 7
232
124
456
输出#1
114
分析
根据题意,先写一个二分查找模板。
while(l<=r){
mid=(l+r)/2;
if(check(mid)){
l=mid;
}else{
r=mid;
}
}
然后写个查找函数,判断每根木材在当前规定的长度下看能切成几段,如果切出的段数大于要求的段数,那么就查找失败了相反那就成功了!
bool check(int x){
int ans=0;
for(int i=1;i<=n;i++){
ans+=a[i]/x;
}
return ans>=k;
}
算法:贪心+二分