Pagini recente » Cod sursa (job #2552118) | Cod sursa (job #2835687) | Cod sursa (job #2845790) | Cod sursa (job #1577520) | Cod sursa (job #1740811)
#include <cstdio>
int v[16001];
int n, k;
int ok(int c){
int tr = 0, s = 0, i;
for (i = 1; i <= n; i ++){
if (v[i] > c)
return 0;
s += v[i];
if (s > c){
tr ++;
s = v[i];
}
}
if (s > 0)
tr ++;
return tr <= k;
}
int bs(int dr){
int med, last = dr + 1, st;
st = 1;
while(st <= dr){
med = dr - ((dr - st) >> 1);
if(ok(med)){
last = med;
dr = med - 1;
}
else
st = med + 1;
}
return last;
}
int main(){
FILE *fin, *fout;
fin = fopen("transport.in", "r");
fout = fopen("transport.out", "w");
int i, s = 0;
fscanf(fin, "%d%d", &n, &k);
for (i = 1; i <= n; i ++)
{
fscanf(fin, "%d", &v[i]);
s += v[i];
}
fprintf(fout, "%d", bs(s));
fclose(fin);
fclose(fout);
return 0;
}