Pagini recente » Cod sursa (job #1075595) | Cod sursa (job #1160653) | Cod sursa (job #1339143) | Cod sursa (job #2886558) | Cod sursa (job #1310860)
#include <cstdio>
#include <algorithm>
using namespace std;
const int N_MAX = 16000;
int verif(int *v, int v_len, int capacitate) {
int suma = 0, transporturi = 1;
for (int i = 0; i < v_len; i++) {
if (suma + v[i] > capacitate) {
//printf("suma: %d .. %d\n", suma, transporturi);
transporturi++;
suma = 0;
}
suma += v[i];
}
printf("%d %d\n", transporturi, capacitate);
return transporturi;
}
int main() {
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
int N, K;
scanf("%d%d", &N, &K);
int v[N_MAX], max_vol = 0, total = 0;
for (int i = 0; i < N; i++) {
scanf("%d", &v[i]);
max_vol = max(v[i], max_vol);
total += v[i];
}
int pas = 1 << 30, poz = 0;
int min_poz = pas;
while (pas >>= 1) {
if (pas + poz <= total - max_vol) {
int test = verif(v, N, pas + poz + max_vol);
if (test > K)
poz += pas;
else if (test == K && pas + poz < min_poz)
min_poz = pas + poz;
}
}
printf("%d", max_vol + min_poz);
//printf("\n%d\n", verif(v, N, 8));
return 0;
}