Cod sursa(job #202981)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 12 august 2008 15:29:08
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.53 kb
#include <stdio.h>
#define N 16001
int v[N],n,k,sol=1<<30;
int valid(int x){
	int l=n,t=0,s;
	while(l){
		s=0;
		while(l && s+v[l]<=x){
			s+=v[l];
			l--;
		}
		if(!s) return 0;
		t++;
	}
	if(t<=k){
		if(x<sol) sol=x;
		return 1;
	}
	return 0;
}
int main(){
	int i,st=1,dr=1<<30,m;
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	scanf("%d%d",&n,&k);
	for(i=1;i<=n;i++)
		scanf("%d",&v[n-i+1]);
	while(st<dr){
		m=(st+dr)/2;
		if(valid(m)) dr=m;
		else st=m+1;
	}
	printf("%d\n",sol);
}