Cod sursa(job #1309756)

Utilizator cernat.catallinFMI Cernat Catalin Stefan cernat.catallin Data 5 ianuarie 2015 23:57:13
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include <stdio.h>

const int Nmax = 16005;

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

bool check(int c) {
	int t = 1;
	int s = 0;
	for (int i = 1; i <= n; ++i) {
		if (v[i] > c) return 0;
		else if (s + v[i] <= c) s += v[i];
		else {
			++t;
			s = v[i];
		}
	}
	return t <= k;
}

int main() {
	freopen("transport.in", "r", stdin);
	freopen("transport.out", "w", stdout);
	int x = 0;

	scanf("%d %d", &n, &k);
	for (int i = 1; i <= n; ++i) {
		scanf("%d", &v[i]);
		x += v[i];
	}

	int pos = 0;
	int step = 1 << 28;
	while (step >>= 1)
		if (pos + step <= x && !check(pos + step))
			pos += step;
	printf("%d\n", pos + 1);

	return 0;
}