Cod sursa(job #1254497)

Utilizator smaraldaSmaranda Dinu smaralda Data 2 noiembrie 2014 20:18:04
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<stdio.h>

const int NMAX = 16010;

int n, k, vol[NMAX];

bool ok (int cap) {
    int i, s, cnt;

    s = 0;
    cnt = 1;
    for(i = 1; i <= n; ++ i) {
        if(vol[i] > cap)
            return 0;
        s += vol[i];
        if(s > cap) {
            s = vol[i];
            ++ cnt;
        }
    }
    return cnt <= k;
}

int bs () {
    int left = 1, right = 16000 * NMAX, mid, last;

    while(left <= right) {
        mid = (left + right) / 2;
        if(ok(mid)) 
            last = mid,
            right = mid - 1;
        else
            left = mid + 1;
    }
    return last;
}

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

    scanf("%d%d", &n, &k);
    for(i = 1; i <= n; ++ i)
        scanf("%d", &vol[i]);
    printf("%d\n", bs());
    return 0;
}