Pagini recente » Cod sursa (job #2246485) | Cod sursa (job #490369) | Cod sursa (job #2630448) | Cod sursa (job #1162024) | Cod sursa (job #1268134)
#include <iostream>
#include <fstream>
int n, k, v[16001];
bool possible(int capacity) {
int weight = 0;
int loads = 0;
for (int i = n - 1; i >= 0; --i) {
if (v[i] > capacity) return false;
if (weight + v[i] > capacity) {
weight = v[i]; loads++;
} else {
weight += v[i];
}
}
return loads + 1 <= k;
}
int main()
{
std::ifstream in("transport.in");
std::ofstream out("transport.out");
in >> n >> k;
for (int i = 0; i < n; ++i) in >> v[i];
int li = 1, lf = ((n / k) + 1) * 16000;
int sol = lf;
while (li <= lf) {
int m = (li + lf) / 2;
if (possible(m)) {
sol = m; lf = m - 1;
} else {
li = m + 1;
}
}
out << sol << std::endl;
in.close();
out.close();
return 0;
}