Pagini recente » Cod sursa (job #119032) | Cod sursa (job #616090) | Cod sursa (job #783881) | Cod sursa (job #1798026) | Cod sursa (job #2077647)
#include <stdio.h>
#include <stdlib.h>
#define L 28
int v[16001];
int ok( int nr, int n, int k ) {
int i = 0, s = 0, c = 1;
do {
i++;
if ( v[i] + s <= nr )
s += v[i];
else {
c++;
s = v[i];
}
} while ( i <= n && v[i] <= nr );
if ( v[i] > nr || c > k )
return 0;
return 1;
}
int cautBin( int n, int k ) {
int pas = 1 << L, r = 0;
while ( pas != 0 ) {
if ( ok( r + pas, n, k ) == 0 )
r += pas;
pas /= 2;
}
return r + 1;
}
int main() {
FILE *fin, *fout;
int n, k, i;
fin = fopen( "transport.in", "r" );
fout = fopen( "transport.out", "w" );
fscanf( fin, "%d%d", &n, &k );
for ( i = 1; i <= n; i++ )
fscanf( fin, "%d", &v[i] );
fprintf( fout, "%d", cautBin( n, k ) );
fclose( fin );
fclose( fout );
return 0;
}