Pagini recente » Cod sursa (job #2322127) | Cod sursa (job #235222) | Cod sursa (job #2931401) | Cod sursa (job #3146536) | Cod sursa (job #2658124)
#include <fstream>
#include <iostream>
using namespace std;
ifstream in ("transport.in");
ofstream out ("transport.out");
const int NMAX = 16e3;
int n, k, st[NMAX];
int mx, s;
void read () {
in >> n >> k;
for (int i=0; i<n; ++i) {
in >> st[i];
mx = std::max(mx, st[i]);
s += st[i];
}
}
bool test (int cp) {
int cnt = 0, c = 0;
for (int i=0; i<n; ++i) {
if (c + st[i] > cp) {
++cnt;
c = st[i];
} else
c += st[i];
// std::cout << "cnt: " << cnt << ", c: " << c << "\n";
}
++cnt;
return cnt <= k;
}
int search () {
int left = mx, right = s, mid, last = -1;
while (left <= right) {
mid = (left + right) / 2;
if (test(mid)) {
right = mid - 1;
last = mid;
} else
left = mid + 1;
}
return last;
}
int main() {
read();
out << search();
in.close();
out.close();
return 0;
}