问题:给出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;
}