Cod sursa(job #624973)

Utilizator matei_cChristescu Matei matei_c Data 23 octombrie 2011 14:13:47
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<cstdio>

const int MAX_N = 16000 ; 
int n,k;
int v[MAX_N];

bool verif(int x)
{
	int suma=0,nr=1;
	for(int i=1;i<=n;++i)
	{
		if(v[i]>x) return false;
		if(suma+v[i]<x) 
			suma+=v[i];
		else
		{
			if(suma+v[i]==x)
			{
				nr++;
				suma=0;
			}	
			else
			{
				nr++;
				suma=v[i];
			}	
		}	
	}	
	return nr<=k ;
}	

int main()
{
	int sol;
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	scanf("%d%d",&n,&k);
	int dr=0;
	for(int i=1;i<=n;++i)
	{	
		scanf("%d",&v[i]);
		dr+=v[i];
	}	
	int st=1 ;
	while(st<=dr)
	{
		int m = (st+dr) /2 ;
		if( verif(m) )
		{
			sol=m;
			dr=m-1;
		}	
		else
		st=m+1;
	}	
	printf("%d\n",sol);
	return 0;
}