Cod sursa(job #352061)

Utilizator drag0s93Mandu Dragos drag0s93 Data 30 septembrie 2009 12:08:20
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<cstdio>

using namespace std;
#define IN "transport.in","r",stdin
#define OUT "transport.out","w",stdout
int N , K ; 
int V[16020];
bool corect(int kg)
{
	int sum = 0;
	int transp = 0;
	for(int i = 1 ; i <= N ; ++i)
		if(V[i] + sum > kg)
		{
			sum = V[i];
			++transp;
		}
		else sum += V[i];
	if(sum > 0)
		++transp;
	if(transp > K)
		return false;
	return true;
}
int main()
{
	int rez;
	
	freopen(IN);
	freopen(OUT);
	scanf("%d%d",&N,&K);
	int max = - 200000;
	for(int i = 1 ; i <= N ; ++i){
		scanf("%d",&V[i]);
		if(V[i] > max)
			max = V[i];
	}
	int st = max , dr = max * 16020 , mij;
	while(st <= dr)
	{
		mij = (st + dr) / 2;
		if(corect(mij) == true)
 			rez = mij, dr = mij - 1;
		else 
			st = mij + 1;
	}
	printf("%d\n",rez);
	return 0;
}