Cod sursa(job #1211377)

Utilizator IonSebastianIon Sebastian IonSebastian Data 22 iulie 2014 15:07:46
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>

using namespace std;

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

const int MAX_N = 16000;

int v[MAX_N+1], partSum[MAX_N+1];
int n;

int transpNo(int start,int capacity)
{
    int i = start+1;
    while(i <= n && partSum[i]-partSum[start] <= capacity)
    {
        i++;
    }
    i--;
    if(i == n)
    {
        return 1;
    }
    int k = 1;
    k += transpNo(i, capacity);
    return k;
}

int main()
{
    int k;
    int sum = 0, maxVol = 0;
    int i;

    in >> n >> k;

    for(i = 1; i <= n; i++)
    {
        in >> v[i];
        partSum[i] = partSum[i-1] + v[i];
        sum += v[i];
        if(v[i] > maxVol)
        {
            maxVol = v[i];
        }
    }
    int st = maxVol, dr = sum, m;
    int x;
    while(st <= dr)
    {
        m = (st+dr)/2;
        x = transpNo(0,m);
        if(x <= k)
        {
            dr = m-1;
        } else {
            st = m+1;
        }
    }
    out << st;
    return 0;
}