Cod sursa(job #1592190)

Utilizator razvandRazvan Dumitru razvand Data 7 februarie 2016 10:38:57
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int v[16003];
int n,k;

bool verif(int V, int st, int am) {
    int cap = 0;
    if(st >= n && am == k)
        return 1;
    if(am > k) {
        return 0;
    }
    while(true) {
        if(cap + v[st] > V || st > n)
            break;
        cap += v[st];
        st++;
    }
    return verif(V, st, am+1);
}

int bin(long st, long dr) {
    long mid = (st+dr)/2;
    bool ve = verif(mid-1, 0, 0);
    bool ve2 = verif(mid, 0, 0);
    if(!ve && ve2)
        return mid;
    if(!ve && !ve2)
        return bin(mid-1, dr);
    if(ve && ve2)
        return bin(st, mid+1);
}

int main() {
    in >> n >> k;
    int V = 0;
    for(int i = 0; i < n; i++) {
        in >> v[i];
        if(v[i] > V)
            V = v[i];
    }
    out << bin(0, 20000000);
    return 0;
}