Cod sursa(job #1802014)

Utilizator horatiucheval2Horatiu Andrei Cheval horatiucheval2 Data 9 noiembrie 2016 19:54:19
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <fstream>

const int MAX = 16000;

// se poate transporta v cu trans transporturi de capacitate cap?
bool transportable(int v[], int len, int cap, int trans){
    int k = 0, s = 0;
    for(int i = 0; i < len; i++){
        if(s + v[i] > cap){
            s = 0;
            k++;
        }
        s += v[i];
    }
    return k + 1 <= trans;
}


int main(){
    std::ifstream fin("transport.in");
    std::ofstream fout("transport.out");

    int n, k, v[MAX], maxV = -1, sumV = 0;
    fin >> n >> k;
    for (int i = 0; i < n; i++){
        fin >> v[i];
        sumV += v[i];
        if(v[i] > maxV){
            maxV = v[i];
        }
    }

    int cap, left = maxV, right = sumV;
    while(left < right){
        int mid = (left + right) / 2;
        if(transportable(v, n, mid, k)){
            right = mid;
        }else{
            left = mid + 1;
        }
    }

    fout << left;

    fin.close();
    fout.close();
    return 0;
}