Cod sursa(job #428266)

Utilizator dexter_dexMutascu Adrian - Dragos dexter_dex Data 29 martie 2010 08:14:49
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<stdio.h>
#define Nmax 16005

int n, k, i, cap, p, u, m, max = 0, S;
int v[Nmax];

int pot (int m){
	
	int cap = 0, nr = 0;
	for (i = 1 ; i <= n ; i++){
		if (cap + v[i] <= m)
			cap += v[i];
		else {
			nr++;
			cap = v[i];
		}
	}
	
	if (nr <= k) return 1;
	return 0;
}

int main (){
	
	FILE * f = fopen ("transport.in", "r");
	FILE * g = fopen ("transport.out", "w");
	
	fscanf (f, "%d %d", &n, &k);
	for (i = 1 ; i <= n ; i++){
		fscanf(f, "%d", &v[i]);
		if (max < v[i])
			max = v[i];
		S += v[i];
	}
	
	p = max;
	u = S;
	while (p <= u){
		m = (p + u)/2;
		if (pot(m))
			u = m-1;
		else 
			p = m+1;		
	}
	
	fprintf(g, "%d", p);
	
	fclose(f);
	fclose(g);
	return 0;
}