Cod sursa(job #77681)

Utilizator andrei.12Andrei Parvu andrei.12 Data 14 august 2007 18:00:02
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<stdio.h>
#define infinit 2000000000 // 2 miliarde
int n, k, i, v[16005], s, max, rezultat;
int bs(){
	int li = max, ls = s, par, min = infinit, ss, p, nrt;
	while (li <= ls){
		p = (li+ls)/2;
		nrt = 1;
		ss = 0;
		par = 0;
		for (i=1; i<=n; i++){
			par += v[i];
			if (par > p){
				nrt ++;
				par = v[i];
			}
			if (nrt > k)
				ss = 1;
		}
		if (ss)
			li = p+1;
		else{
			if (p < min)
				min = p;
			ls = p-1;
		}
	}
	return min;
}
int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	scanf("%d%d", &n, &k);
	for (i=1; i<=n; i++){
		scanf("%d", &v[i]);
		s += v[i];
		if (v[i] > max)
			max = v[i];
	}
	rezultat = bs();
	printf("%d\n", rezultat);
	fclose(stdin);
	fclose(stdout);
	return 0;
}