Cod sursa(job #799532)

Utilizator dariusdariusMarian Darius dariusdarius Data 19 octombrie 2012 11:41:32
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include<stdio.h>
inline int maxim(int a,int b) {return a>b?a:b;}
int k,n,a[16005];
bool ok(int c)
{
	int i,nr,s;
	s=a[1];nr=1;
	for(i=2;i<=n;i++)
		if(s+a[i]<=c)
			s=s+a[i];
		else
		{
			s=a[i];
			nr++;
		}
	return nr<=k;
}
int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	int i,s=0,max=-1,st,dr,med,last;
	scanf("%d%d",&n,&k);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		s=s+a[i];
		max=maxim(max,a[i]);
	}
	st=max;dr=s;last=-1;
	while(st<=dr)
	{
		med=(st+dr)/2;
		if(ok(med))
		{
			last=med;
			dr=med-1;
		}
		else
			st=med+1;
	}
	printf("%d\n",last);
	return 0;
}