Pagini recente » Cod sursa (job #1726156) | Cod sursa (job #1554936) | Cod sursa (job #1814744) | Cod sursa (job #1916002) | Cod sursa (job #1276082)
#include <stdio.h>
#include <stdlib.h>
int v[16001];
int n, k ;
int ok ( int c )
{
int tr, s , i ;
tr = s = 0 ;
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, st;
last = dr + 1 ;
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 ;
fscanf( fin,"%d%d",&n,&k ) ;
s = 0 ;
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;
}