Cod sursa(job #818958)

Utilizator mardareoctavR. Mardare mardareoctav Data 18 noiembrie 2012 13:02:58
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
#define NMAX 16001

using namespace std;

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

int N, K;
int V[NMAX];

int sum, smax, rez;

void read() {
    int i;
    fin >> N >> K;

    for(i = 1; i <= N; ++ i) {
        fin >> V[i];
        sum += V[i];
        if(V[i] > smax) smax = V[i];
    }
    rez = sum;
}

int check(int m) {
    int i, S = 0, nrTransport = 1;

    for(i = 1; i <= N; ++ i)
    {
        if(S + V[i] <= m)
            S += V[i];
        else {
            ++ nrTransport;
            if(V[i] > m) return 0;
            S = V[i];
        }
    }

    if(nrTransport > K) return 0;
    if(m < rez) rez = m;
    return 1;
}

void binary_search(int st, int dr) {
    int m = (st + dr) / 2;
    if(st >= dr) return ;
    if(check(m)) binary_search(st, m);
    else binary_search(m + 1, dr);
}

int main() {
    read();
    binary_search(smax, sum);
    fout << rez << '\n';
    return 0;
}