Cod sursa(job #678431)

Utilizator mika17Mihai Alex Ionescu mika17 Data 11 februarie 2012 17:47:01
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <fstream>
#include <vector>
using std::vector;

int main()
{
	std::ifstream in("transport.in");
	std::ofstream out("transport.out");

	int N,K;
	in >> N >> K;
	vector<int> cap(N);
	for(int i=0;i<N;++i)
		in >> cap[i];

	int lb = cap[0], ub = cap[0];
	for(int i=1;i<N;++i)
		lb = std::max(lb,cap[i]), ub += cap[i];

	int sol;
	while(lb <= ub)
	{
		int c = (lb + ub) >> 1;

		int k = 1;
		for(int s = 0, i = 0; i < N; ++i)
		{
			if(s + cap[i] <= c)
				s += cap[i];
			else s = cap[i], k++;
		}
		if(k > K) //capacitate prea mica
			lb = c + 1;
		else sol = c, ub = c - 1;
	}

	out << sol;
	return 0;
}