Pagini recente » Cod sursa (job #2402092) | Cod sursa (job #1236124) | Profil razielreaper | Cod sursa (job #238980) | Cod sursa (job #122456)
Cod sursa(job #122456)
#include <stdio.h>
#define in "transport.in"
#define out "transport.out"
#define NMAX 16003
int n, MAXIM, _poz, count, K;
int VOL[NMAX];
int st, dr, mij;
int Ok( int C );
int main()
{
freopen( in, "r", stdin );
freopen( out, "w", stdout );
scanf( "%d%d", &n, &K );
int i;
MAXIM = 0;
for ( i = 1; i <= n; ++i )
{
scanf( "%d", &VOL[i] );
if ( VOL[i] > MAXIM ) MAXIM = VOL[i];
}
//cautarea binara
st = 1;
dr = (MAXIM<<20);
while ( st <= dr )
{
mij = ((st+dr)>>1);
if ( Ok(mij) ) dr = mij-1;
else st = mij+1;
}
printf( "%d\n", st );
/*
int bl = 1,br = MAXIM, bm;
while ( br - bl > 1 )
{
bm = (br+bl)>>1;
if ( Ok( bm ) ) bl = bm;
else br = bm;
}
printf( "%d\n", bl ); */
return 0;
}
int Ok( int C )
{
int suma = 0;
int i;
count = 0;
suma = VOL[1];
for ( i = 2; i <= n; ++i )
{
if ( (suma + VOL[i]) > C )
{
count++;
suma = VOL[i];
}
else suma += VOL[i];
}
if ( suma <= C )
{
count++;
suma = 0;//nu mai trebuie
}
else if ( suma > C )
{
int x = (suma/C + 1);
count += x;
}
if ( count <= K ) return 1;
return 0;
}