Cod sursa(job #952583)

Utilizator tudorv96Tudor Varan tudorv96 Data 23 mai 2013 18:27:42
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>
using namespace std;

#define in "transport.in"
#define out "transport.out"
#define N 16005

int v[N], n, k, s;

bool Try (int s) {
	int d = 1, tmp = 0;
	for (int i = 0; i < n; ++i)
		if (tmp + v[i] <= s)
			tmp += v[i];
		else {
			d++;
			tmp = v[i];
		}
	if (d > k)
		return false;
	return true;
}

int BS () {
	int lo = 1, hi = s + 1, sol = s;
	while (lo < hi) {
		int mid = (lo + hi) >> 1;
		if (Try(mid)) {
			sol = mid;
			hi = mid;
		}
		else
			lo = mid + 1;
	}
	return sol;
}
	

int main () {
	ifstream fin (in);
	fin >> n >> k;
	for (int i = 0; i < n; ++i) {
		fin >> v[i];
		s += v[i];
	}
	fin.close();
	ofstream fout (out);
	if (k > 1) {
		int sol = BS ();
		fout << sol;
	}
	else
		if (k == 1)
			fout << s;
	fout.close();
	return 0;
}