Pagini recente » Cod sursa (job #1891499) | Cod sursa (job #1155723) | Cod sursa (job #2798220) | Cod sursa (job #372043) | Cod sursa (job #1493588)
#include <stdio.h>
#include <assert.h>
#include <algorithm>
using namespace std;
const char *in = "transport.in";
const char *out = "transport.out";
const int maxN = 16e3;
int v[maxN], N, K, S, ans, M;
bool ok(int C) {
int tmin = 1, c;
c = v[0];
for(register int i = 1; i < N; ++ i) {
if(c + v[i] <= C)
c += v[i];
else {
c = v[i];
++ tmin;
}
}
return tmin <= K;
}
void caut(int st, int dr) {
while(st <= dr) {
int mid = (st + dr) >> 1;
if(ok(mid)) {
ans = mid;
dr = mid - 1;
} else
st = mid + 1;
}
}
int main() {
assert(freopen(in, "r", stdin));
assert(freopen(out, "w", stdout));
scanf("%d %d", &N, &K);
for(register int i = 0; i < N; ++ i)
scanf("%d", &v[i]), S += v[i], M = max(M, v[i]);
caut(M, S);
printf("%d\n", ans);
return 0;
}