Cod sursa(job #886799)

Utilizator superman_01Avramescu Cristian superman_01 Data 23 februarie 2013 11:59:15
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<cstdio>

#define NMAX 16001

using namespace std;

int v[NMAX],n,k;

bool good ( int capacity)
{
	int nr=0;
	int s=0;
	for( int i(1); i <= n && nr <=k ; ++i)
		
	{
		if(s+v[i] <= capacity)
		   s+=v[i];
		else
		{
			s=0;
			++nr;
			--i;
			
		}
		
		
		
	}
	if(s!=0)
		++nr;
	
	if(nr>k)
		return 0;
	else return 1;
	
	
}



int search()
{
	
	int lo=1;
	int hi=NMAX*NMAX;
	int mid;
	int result;
	while( lo <= hi )


	{
		
		mid=(hi+lo)/2;
		if( good(mid) ==  1 )
		{
			result = mid;
			hi=mid-1;
		}
		else
		{
		 	
			lo=mid+1;
		}
		
		
		
	}		
	return result;
}




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