Cod sursa(job #520761)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 10 ianuarie 2011 11:54:33
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include <stdio.h>
FILE *f=fopen("transport.in","r");
FILE *g=fopen("transport.out","w");
int n,v[16001],k;
int vmax,smax;

bool pot(int c){
	int register t,cc=0,i;
	t=1;
	for(i=1;i<=n;i++){
		if(v[i]+cc<=c){
			cc+=v[i];
		}
		else{
			t++;
			cc=v[i];
		}
		if(t>k)
			return false;
	}
	return true;
}

int main(void){
	int register i,j;
	
	fscanf(f,"%d %d",&n,&k);
	for(i=1;i<=n;i++){
		fscanf(f,"%d",&v[i]);
		if(v[i]>vmax)
			vmax=v[i];
		smax+=v[i];
	}
	
	int register p,u,m;
	p=vmax; u=smax;
	while(p<=u){
		m=p+(u-p)/2;
		if(pot(m)){
			u=m-1;
		}
		else
			p=m+1;
	}
	fprintf(g,"%d",p);
	return 0;
}