Cod sursa(job #627425)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 29 octombrie 2011 21:32:29
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <fstream>

using namespace std;

ifstream in("transport.in");
ofstream out("transport.out");

const int N=16001;

int n,k,stack[N],capmax;

bool check(int x){
	int top=1,capcur=0,nrtrans=1;
	while(top<=n){
		if(capcur+stack[top]<=x)
			capcur+=stack[top];
		else{
			capcur=stack[top];
			nrtrans++;
			if(nrtrans>k)
				return false;
		}
		top++;
	}
	return true;
}

int Solve(){
	int bestcap;
	int st=0,dr=capmax,m;
	m=(st+dr)/2;
	while((m!=st) && (m!=dr)){
		if(check(m)){
			dr=m;
			bestcap=m;
		}
		else{
			st=m;
		}
		m=(st+dr)/2;
	}
	return bestcap;
}

int main(){
	int i;
	in>>n>>k;
	for(i=1;i<=n;i++){
		in>>stack[i];
		capmax+=stack[i];
	}
	out<<Solve();//caut binar capacitatea minima
	return 0;
}