Cod sursa(job #308475)

Utilizator drag0s93Mandu Dragos drag0s93 Data 27 aprilie 2009 11:59:30
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<cstdio>

#define IN "transport.in","r",stdin
#define OUT "transport.out","w",stdout
#define maxN 16020

int V[maxN] ;
int N , K ;
int Max = -100000000;
int sum ;
int right(int c)
{
	int kg = 0 , trans = 1;
	for(int i = 1 ; i <= N ; ++i)
	{
		if(kg + V[i] > c)	{++trans;kg = V[i];}
		else kg += V[i];
	}
	return trans <= K;
}
int main()
{
	freopen(IN);
	freopen(OUT);
	scanf("%d%d",&N,&K);
	for(int i = 1 ; i <= N ; ++i)
	{
		scanf("%d",&V[i]);
		sum += V[i];
		if(Max < V[i])	Max = V[i];
	}
	int st = Max , dr = sum ,m;
	int rez ;
	while(st <= dr)
	{
		m = (st + dr) / 2;
		if(right(m))
		{
			dr = m - 1;
			rez = m;
		}
		else	st = m + 1;
	}
	printf("%d\n",rez);
	return 0;
}