Cod sursa(job #287071)

Utilizator borsoszalanBorsos Zalan borsoszalan Data 24 martie 2009 15:43:30
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include<stdio.h>

int i,n,k, a[16500], max=-1;
long s=0;
int greedy (long p)
{
	s=0;
	int sz=1;
	for(i=1;i<=n;i++)		
		if (s+a[i]<=p)
			s+=a[i];
		else
		{
			s=0;
			++sz;
			--i;
		}
	if (sz<=k) return 1;
	return 0;
}
long binker(long st, long dr)
{
long p,x;
while (st<=dr)	
{
	p=st +(dr-st)/2;
if(greedy(p)==1)
{
	dr=p-1;
	x=p;
}
else
	st=p+1;
}
return x;
}
 int main()
{	
	freopen("transport.in", "r", stdin);
	freopen("transport.out", "w", stdout);
	scanf("%d %d", &n,&k);
	for(i=1;i<=n;i++)
	{
		scanf("%d", &a[i]);
		s+=a[i];
		if(a[i]>max)
			max=a[i];
	}
	printf("%ld", binker(max,s));
	return 0;
}