Cod sursa(job #604968)

Utilizator vlad2901Vlad Berindei vlad2901 Data 26 iulie 2011 12:25:49
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
#define MAX 16001


int a[MAX], n, k;

int min_transp(int c)
{
    int liber = c, nr = 0, i;
    for(i=0;i<n;++i)
    {
        if(a[i] <= liber)
        {
            liber -= a[i];
        }
        else
        {
            liber = c-a[i];
            nr++;
        }
    }
    if(liber == c) return nr;
    else return nr+1;
}

int bin_search(int st, int dr)
{
    int m;
    if(st >= dr)
    {
        return st;
    }

    m = (st+dr)/2;

    if(min_transp(m) <= k)
    {
        return bin_search(st, m);
    }
    return bin_search(m+1, dr);

}

int main()
{
    int i, max = 0, sum = 0;
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);

    scanf("%d %d", &n, &k);

    for(i=0;i<n;++i)
    {
        scanf("%d", &a[i]);
        sum += a[i];
        if(max < a[i])
        {
            max = a[i];
        }
    }

    printf("%d", bin_search(max, sum));

    return 0;
}