Cod sursa(job #520252)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 7 ianuarie 2011 17:16:14
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <stdio.h>

const int maxn=16005;
int i,N,K,max,S,C,v[maxn];

void citire()
{
	scanf("%d %d",&N,&K);
	for(i=1;i<=N;i++)
	{
		scanf("%d",&v[i]);
		if(v[i]>max) max=v[i];
		S+=v[i];
	}
}

int nr_tr(int c)
{
	int Sp=0,nr=0; i=1;
	while(i<=N)
	{
		for(Sp=0;Sp+v[i]<=c && i<=N;i++)
			Sp+=v[i];
		nr++;
		if(nr>K) return K+1;
	}
	return nr;
}

void cb()
{
	int st=max, dr=S;
	int m=st+(dr-st)/2; 
	while(st<dr)
	{
		if(nr_tr(m)<=K)
			dr=m;
		else st=m+1;
		C=dr;
		m=st+(dr-st)/2;
	}
}

int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	citire();
	cb();
	printf("%d",C);
}