Cod sursa(job #496327)

Utilizator carolursu carol carol Data 28 octombrie 2010 16:27:01
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<stdio.h>
int t,n,k,s[16001];
int transporturi(int c)
{
	int cap,i,nd=0;
	cap=0;
	for(i=1;i<=n;i++)
		if(s[i]>c)
			return k+1;
		else
			if(cap+s[i]<=c)
				cap=cap+s[i];
			else
			{
				nd++;
				cap=s[i];
			}
			if(cap>0)
				nd++;
			return nd;
}

int bs()
{
	int st,dr,med,last,d;
	st=1;
	dr=t;
	while(st<=dr)
	{
		med=(st+dr)/2;
		d=transporturi(med);
		if(d>k)
		    st=med+1;		
		else		
		 {
			dr=med-1;	
			last=med;		
         }		
	}		
return last;
}
		
int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	int i;
	scanf("%d%d",&n,&k);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&s[i]);
	    t=t+s[i];
	}	
	printf("%d\n",bs());
	return 0;
}