Cod sursa(job #272692)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 7 martie 2009 17:53:04
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.56 kb
#include <stdio.h>
#define K 1<<30
#define N 16003
int n,k,v[N],sol=K;
int valid(int x){
	int t=1,s=0,i;
	for(i=1;i<=n;i++){
		if(s+v[i]>x) {
			t++;
			s=0;
		}
		else s+=v[i];
	}
	if(t<=x) {
		if(x>sol) sol=t;
		return 1;
	}
	return 0;
}
int main(){
	int i,st=1,dr=K,m=0;
	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]);
		if(v[i]>m) m=v[i];
	}
	st=m;
	while(st<dr){
		m=(st+dr)/2;
		if(valid(m)) dr=m;
		else st=m+1;
	}
	printf("%sol\n",st);
}