Cod sursa(job #505640)

Utilizator joli94Apostol Adrian Alexandru joli94 Data 3 decembrie 2010 13:05:38
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<cstdio>

const int N = 1<<14;
int v[N] , n , k , max = -1 ;

void read()
{
	freopen ( "transport.in" , "r" , stdin );
	freopen ( "transport.out" , "w" , stdout );
	scanf ( "%d%d" , &n , &k );
	for (int i=1 ; i<=n ; ++i )
	{
		scanf ( "%d" , &v[i] );
		//if (v[i]>max) v[i] = max;
	}
}

bool ok(int c)
{
	int nr = 0 , i , cap ;
	for ( i=1 ; i<=n; )
	{
		cap = c;
		if(v[i]>c)
			return false;
		while ( i<=n && cap>=v[i] )
		{
			if(v[i]>c)
				return false;
			cap-=v[i];	
			++i;
		}
		++nr;
	}
	return nr<=k;
}

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

int main()
{
	read();
	printf( "%d\n" , cautbin() );
	return 0;
}