木棒切割问题
给出N根木棒,长度均已知,现在希望通过切割它们来得到至少K段长度相等的木棒(长度必须是整数),问这些长度相等的木棒最长能有多长.
例如三根长度分别为10,24,15的木棒,假设K=7,即需要至少7段长度相等的木棒,那么可以得到最大长度为6.
这里我默认为木棒长度有序,二分答案即可.
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int fun(int N, int L, int A[]) {
int ans = 0;
for (int i = 0; i < N; ++i)
ans += A[i] / L;
return ans;
}
int main() {
int N, K;
while (scanf("%d%d", &N, &K) != EOF) {
int A[100];
for (int i = 0; i < N; ++i)
scanf("%d", &A[i]);
int left = 0, right = A[N - 1], mid;
while (left < right) {
mid = (left + right) / 2;
if (fun(N, mid, A) < K)
right = mid;
else
left = mid + 1;
}
printf("%d\n", left - 1);
}
return 0;
}