Cod sursa(job #391672)

Utilizator ooctavTuchila Octavian ooctav Data 6 februarie 2010 01:11:29
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <cstdio>
#define NMAX 16005
#define VOLMAX 16005
int N,K;
int e[NMAX];

void citire()
{
	scanf("%d%d",&N,&K);
	for(int i=1;i<=N;i++)
		scanf("%d",&e[i]);
}

int ok(int x)
{
	int a=0,p=1;
	for(int i=1;i<=N;i++)
	{
		if(e[i]>x)
			return 0;
		if(a+e[i]<=x)
			a+=e[i];
		else
			a=e[i],p++;
	}		
	if(p<=K)
			return 1;
	return 0;
}

int cautare_binara()
{
	int p=1,a=0;
	while(p<=VOLMAX)
		p<<=1;
	while(p)
	{
		if(!ok(a+p))
			a+=p;
		p>>=1;
	}
	return a+1;
}

int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	citire();
	printf("%d",cautare_binara());
	
	return 0;
}