Cod sursa(job #1528555)

Utilizator florin.elfusFlorin Elfus florin.elfus Data 19 noiembrie 2015 20:28:09
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;

int x[16666];

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

    int n, k, low = 16666, up = 0;
    scanf("%d%d", &n, &k);
    for (int i = 1; i <= n; ++i) {
        scanf("%d", &x[i]);
        up += x[i];
        if (x[i] < low)
            low = x[i];
    }

    int st = low, dr = up, res;
    while (st <= dr) {
        int med = (st + dr) / 2;
        int camioane = 1;
        int sum = 0;
        for (int i = 1; i <= n; ++i) {
            if (sum + x[i] <= med)
                sum += x[i];
            else {
                ++camioane;
                sum = x[i];
            }
        }
        if (camioane <= k) {
            res = med;
            dr = med - 1;
        } else
            st = med + 1;
    }

    printf("%d", res);
    return 0;
}