Cod sursa(job #1521763)

Utilizator ericptsStavarache Petru Eric ericpts Data 10 noiembrie 2015 20:17:08
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <vector>
#include <iostream>\

using namespace std;

int n, k;

vector<int> v;

bool good(int mx, int now, int k, int at){

    if(k <= 0)
        return false;
    if(at == n + 1)
        return true;

    if(now + v[at] <= mx)
        return good(mx, now + v[at], k, at + 1);
    else if(v[at] <= mx)
        return good(mx, v[at], k - 1, at + 1);
    else
        return false;
}

bool good(int wgt) {
    return good(wgt, 0, k, 1);
}

int bsearch() {
    int i, step = 15;
    for(i = 0; step; step /= 2) {
        if(!good(i + step))
            i += step;
    }
    return i + 1;
}

int main() {
    ifstream in("transport.in");
    in >> n >> k;

    v.resize(n + 1);


    for(int i = 1; i <= n; ++i)
        in >> v[i];

    ofstream out("transport.out");

    out << bsearch() << "\n";

    return 0;
}