Cod sursa(job #448622)

Utilizator SmarandaMaria Pandele Smaranda Data 4 mai 2010 10:28:03
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<stdio.h>
long x[16001];
long sp[16002];
int main()
{
	long n,k,i,m,min=1000000000,nk,s=0,vs,st,dr,min2,ok=1;
	
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	
	scanf("%ld%ld",&n,&k);
	for (i=1;i<=n;i++)
		{
			scanf("%ld",&x[i]);
			sp[i]=sp[i-1]+x[i];
		}
	st=1;
	dr=sp[n];
	min2=min;
	sp[n+1]=sp[n]+10;
	while (st<=dr)
	{
		m=(st+dr)/2;
		nk=0;
		s=0;
		vs=0;
	//	for (i=1;i<=n;i++)
		
		for (i=1;i<=n;i++)
		{
			if (sp[i]-vs>m)
			{
				nk++;
				vs=sp[i-1];
			}
		}
			
	
			
		if (nk<=k)
		{
			if (m<min)
				min=m;
			dr=m-1;
		}
		else
			st=m+1;
	}
	if (min==min2)
		printf("%ld\n",sp[n]);
	else
	printf("%ld\n",min);
	return 0;
}