Pagini recente » Cod sursa (job #297837) | Cod sursa (job #941338) | Cod sursa (job #2236712) | Cod sursa (job #3189708) | 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;
}