问题:给出N根木棒长度已知但不一定相等, 现在希望通过切割得到长度相等的K根木棒,求长度相等的K根木棒最长是多少?
如:给3根木棒,长度为10, 24, 15,要切割得到7根长度相等的木棒, 则7根木棒的长度最长为6,其组合为16+46+2*6。
分析:
二分法处理问题 ,左右边界为最小解和最大解,mid为当前解
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=10010;
int main()
{
int a[maxn];//存放木棍
int n,k;//木棍数,要切出的木棍数
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
int left=0,right=a[n-1],mid;
while(left+1<right)
{
int sum=0;
mid=(left+right)/2;
for(int i=0;i<n;i++){
sum+=a[i]/mid;
}
if(sum>=k){
left=mid;
}
else{
right=mid;
}
}
printf("%d\n",left);
return 0;
}