Pagini recente » Cod sursa (job #2389421) | Istoria paginii utilizator/ofizquierdo | Cod sursa (job #2951777) | Cod sursa (job #2357152) | Cod sursa (job #2076335)
#include <algorithm>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
const int MAX_N = 16005;
int a[MAX_N];
int tr(int s, int n) {
int num = 0, current_sum = a[1];
for (int i = 2; i <= n; ++ i) {
if (current_sum + a[i] > s) {
current_sum = a[i];
num += 1;
} else {
current_sum += a[i];
}
}
return num + 1;
}
int main() {
ifstream cin("transport.in");
ofstream cout("transport.out");
int n, k;
cin >> n >> k;
int left = 0, right = 0, best = 1 << 30;
for (int i = 1; i <= n; ++ i) {
cin >> a[i];
left = max(left, a[i]);
right = right + a[i];
}
while (left <= right) {
int middle = (left + right) / 2;
if (tr(middle, n) <= k) {
best = middle;
right = middle - 1;
} else {
left = middle + 1;
}
}
cout << best << "\n";
return 0;
}