Cod sursa(job #555913)

Utilizator Cristy94Buleandra Cristian Cristy94 Data 15 martie 2011 20:45:30
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<cstdio>
#include<algorithm>
#define Nmax 16010

using namespace std;

int N,K,vol[Nmax],val_max,suma,sol,cap;

bool posibil(int c){
	
	int s=0,t=1;
	
	for(int i=1;i<=N&&t<=K;++i){
	    if(s+vol[i]<=c)
			s+=vol[i];
		else
			s=vol[i],
			t++;
		
	}
	
	if(t>K)
		return 0;
	return 1;
	
}

int main(){
	
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	
	scanf("%d%d",&N,&K);
	
	for(int i=1;i<=N;++i)
		scanf("%d",&vol[i]),
	    val_max=max(val_max,vol[i]),
		suma+=vol[i];
		
	int p=val_max,u=suma;
	
	while(p<=u){
		cap=(p+u)/2;
		
		if(posibil(cap))
		  	sol=cap,
		    u=cap-1;
		  
		  
		else p=cap+1;		
	}
	
   printf("%d",sol);	
}