Cod sursa(job #1308525)

Utilizator TiberiuDTiberiu Danciu TiberiuD Data 4 ianuarie 2015 12:32:56
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <fstream>

using namespace std;

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

int a[16002], k, n;

bool sePoateTransporta(int x) {
	int transp = 0, sum = 1000000000, i;
	for (i = 1; i <= n; i++) {
		if (sum + a[i] > x && a[i] <= x) {
			transp++;
			sum = a[i];
		} else if (sum + a[i] <= x) sum += a[i];
		if (a[i] > x) return false;
		if (transp > k) return false;
	}
	
	return true;
}

int main() {
	int m, st, dr, s = 0;
	
	in >> n >> k;
	
	for (int i = 1; i <= n; i++) {
		in >> a[i];
		s += a[i];
	}
	
	st = 1;
	dr = 2 * s;
	while (st <= dr) {
		m = (st + dr) / 2;
		if (sePoateTransporta(m)) dr = m - 1;
		else st = m + 1;
	}
	
	out << st;
	return 0;
}