Cod sursa(job #354766)

Utilizator alutzuAlexandru Stoica alutzu Data 9 octombrie 2009 13:15:20
Problema Transport Scor 100
Compilator cpp Status done
Runda cautb1 Marime 0.76 kb
#include<cstdio>
#define N 16001 
int n , k ;
int x [ N ] ;

bool ok ( int cap )
{
	int nrt = 1 ;
	int capc = 0 ;
	int i ;
	for ( i = 1 ; i <= n && nrt <= k ; i ++ )
		if ( x[i] > cap ) return false;
		else
			if ( capc + x[i] <= cap )
				capc += x[i];
			else 
			{ 
				capc=x[i];
				nrt ++ ;
			}
	if ( nrt > k ) return false ;
	return true; 
	
}

int caut () 
{
	int pas = 1 << 30 , i;
	for ( i = 0 ; pas ; pas >>=1 )
		if ( !ok(i+pas) )
			i+=pas;
	return i + 1 ;
	
}

int main ( )
{
	
	freopen ( "transport.in" , "r" , stdin ) ;
	freopen ( "transport.out" , "w" , stdout ) ;
	
	scanf ( "%d%d" , & n , & k ) ;
	int i ;
	for ( i = 1 ; i <= n ; i ++ )
		scanf ( "%d" , & x[i] ) ;
	
	printf ( "%d" , caut () ) ;
	
	return 0 ;
}