Pagini recente » Cod sursa (job #66849) | Cod sursa (job #2649495) | Cod sursa (job #73875) | Galerie | Cod sursa (job #2079933)
#include <bits/stdc++.h>
using namespace std;
void solve() {
size_t weight_count, max_transports;
cin >> weight_count >> max_transports;
int64_t sum = 0;
vector< int > weights(weight_count);
for (auto& it : weights) {
cin >> it;
sum += it;
}
auto verify = [&](int64_t capacity) -> bool {
int64_t current_sum = 0;
int transports = 1;
for (auto&& it : weights) {
if (it > capacity)
return false;
if (current_sum + it > capacity)
transports++, current_sum = it;
else
current_sum += it;
if (transports > max_transports)
return false;
}
return true;
};
int64_t left = 1, right = sum;
while (left <= right) {
int64_t middle = (left + right) / 2;
if (verify(middle))
right = middle - 1;
else
left = middle + 1;
}
cout << left << endl;
}
int main() {
assert(freopen("transport.in", "r", stdin));
assert(freopen("transport.out", "w", stdout));
cin.tie(nullptr);
ios_base::sync_with_stdio(false);
solve();
return 0;
}