Pagini recente » Cod sursa (job #2422825) | Cod sursa (job #2764469) | Cod sursa (job #1276140) | Cod sursa (job #182104) | Cod sursa (job #1785055)
#include <cstdio>
using namespace std;
#define NMAX 16005
int n, k, volume[NMAX], maxCapacity, minCapacity;
bool enough(int maxCapacity, int nrMaxTransports) {
int currentCapacity = 0, nrTransports = 1;
for (int i = 1; i <= n; i++) {
if (currentCapacity + volume[i] > maxCapacity) {
nrTransports++;
if (nrTransports > nrMaxTransports) {
return false;
}
currentCapacity = volume[i];
}
else {
currentCapacity += volume[i];
}
}
return true;
}
int binarySearch(int minCapacity, int maxCapacity, int k) {
int L = minCapacity, R = maxCapacity, M, solution;
while (L <= R) {
M = (L + R) >> 1;
if (enough(M, k)) {
solution = M;
R = M - 1;
}
else L = M + 1;
}
return solution;
}
int main() {
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
scanf("%d %d", &n, &k);
for (int i = 1; i <= n; i++) {
scanf("%d", &volume[i]);
maxCapacity += volume[i];
if (volume[i] > minCapacity) {
minCapacity = volume[i];
}
}
int answer = binarySearch(minCapacity, maxCapacity, k);
printf("%d", answer);
return 0;
}