Cod sursa(job #318852)

Utilizator ooctavTuchila Octavian ooctav Data 29 mai 2009 18:27:50
Problema Transport Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <stdio.h>

int e[16001];
int n,k,max=0,suma=0,st,dr,mij,rez=100000;

int ver(int mijloc)
{
	int a=mijloc,nr=1;
	for(int i=1;i<=n;i++)
		if(e[i]<=a)
			a=a-e[i];
		else
		{
			a=mijloc-e[i];
			nr++;
		}
	if(nr<=k)
		return 1;
	else
		return 0;
}

int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	scanf("%d %d",&n,&k);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&e[i]);
		if(e[i]>max)
			max=e[i];
		suma=suma+e[i];
	}
	st=max;dr=suma;
	while(st<=dr)
	{
		mij=st+(dr-st)/2;
		if(ver(mij))
		{
			if(mij<rez)
				rez=mij;
			dr=mij-1;
		}
		else
			st=mij+1;
		
	}
	printf("%d",rez);
	
	
	return 0;
}