Pagini recente » Cod sursa (job #1756712) | Cod sursa (job #3005109) | Cod sursa (job #249279) | Cod sursa (job #1210861) | Cod sursa (job #92497)
Cod sursa(job #92497)
#include <cstdio>
const int N = 16000;
int n,k;
int a[N];
int s,f;
int t ( int c ) {
if (c < s) return 0x3f3f3f3f;
int tr = 1, free = c;
for (int i = 0; i < n; ++i) {
if (free >= a[i]) {
free -= a[i];
} else {
++tr;
free = c - a[i];
}
}
return tr;
}
int bs ( int a, int b ) {
if (b-a > 1) {
if (t((a+b)/2) > k)
return bs((a+b)/2,b); else
return bs(a,(a+b)/2);
} else {
if (t(a) <= k) return a; else return b;
}
}
int main() {
freopen("transport.in","rt",stdin);
freopen("transport.out","wt",stdout);
scanf("%d %d",&n,&k);
s = -0x3f3f3f3f;
f = 0;
for (int i = 0; i<n; ++i) {
scanf("%d",&a[i]);
if (s < a[i]) s = a[i];
f += a[i];
}
int c = bs(0,f);
printf("%d\n",c);
return 0;
}