Cod sursa(job #800339)

Utilizator assa98Andrei Stanciu assa98 Data 21 octombrie 2012 13:25:07
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<stdio.h>

int n,k,v[17000],min;

int transport(int c)
{
    int s=v[1];
    int dr=1;
    for(int i=2;i<=n;i++)
    {
        if(v[i]>c)
            return k+1;
        if(v[i]+s>c)
        {
            s=v[i];
            dr++;
        }
        else
            s+=v[i];
    }
    return dr;
}

void cauta(int inf,int sup)
{
    if(inf<=sup)
    {

        int mij=(sup+inf)/2;
        if(transport(mij)>k)
            cauta(mij+1,sup);
        else
        {
            min=mij;
            cauta(inf,mij-1);
        }
    }
}

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

    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;scanf("%d",&v[i]),i++)
        suma+=v[i-1];

    cauta(1,suma);
    printf("%d",min);

    return 0;

}