Pagini recente » Cod sursa (job #699145) | Cod sursa (job #1377028) | Cod sursa (job #3160747) | Cod sursa (job #552346) | Cod sursa (job #2421440)
#include <stdio.h>
#include <stdlib.h>
int v[16000];
int main() {
FILE *fin, *fout;
int n, k, i, nr, suma, cap, st, dr, mijl, rez, max;
fin = fopen( "transport.in", "r" );
fscanf( fin, "%d%d", &n, &k );
suma = 0;
max = 0;
for( i = 0; i < n; i++ ) {
fscanf( fin, "%d", &v[i] );
suma += v[i];
if( v[i] > max )
max = v[i];
}
fclose( fin );
st = max;
dr = suma;
rez = 16000000;
while( st <= dr ) {
mijl = ( st + dr ) / 2;
nr = 1;
cap = 0;
for( i = 0; i < n; i++ ) {
cap += v[i];
if( cap > mijl ) {
cap = v[i];
nr++;
}
}
if( nr < k )
dr = mijl - 1;
else if( nr > k )
st = mijl + 1;
else {
dr = mijl - 1;
if( mijl < rez )
rez = mijl;
}
}
fout = fopen( "transport.out", "w" );
fprintf( fout, "%d", rez );
fclose( fout );
return 0;
}