Cod sursa(job #1094973)

Utilizator crisbodnarCristian Bodnar crisbodnar Data 30 ianuarie 2014 09:09:29
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int Nmax = 16e3 + 100;

int N, K, S, LG, V[Nmax], maxim;

int OK(int x)
{
    int cap = 0, nr = 1;
    for(int i = 1; i <= N; i++)
    {
        cap += V[i];
        if(cap > x)
        {
            cap = V[i];
            nr++;
        }
    }
    return nr;
}

int main()
{
    fin >> N >> K;
    for(int i = 1; i <= N; i++)
    {
        fin >> V[i];
        S += V[i];
        maxim = max(maxim, V[i]);
    }

    for(LG = 1; LG <= S; LG <<= 1);

    int i, lg;
    for(i = S,lg = LG; lg; lg >>= 1)
        if(i - lg >= maxim && OK(i - lg) <= K)
            i -= lg;
    fout << i;
    return 0;
}