Cod sursa(job #1405502)

Utilizator RaduToporanRadu Toporan RaduToporan Data 29 martie 2015 12:20:31
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <cstdio>

int v[16005],i,n,nr,Nr,Max;
long long s,st,dr,mij,sol;

int main()
{
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    scanf("%d%d",&n,&Nr);
    for (i=1; i<=n; i++)
    {
        scanf("%d",&v[i]);
        dr=dr+v[i];
        if (v[i]>Max) Max=v[i];
    }
    st=Max;
    while (st<=dr)
    {
        mij=(st+dr)/2;
        nr=1;
        s=0;
        for (i=1; i<=n; i++)
            if (s+v[i]<=mij) s+=v[i];
        else
        {
            s=v[i];
            nr++;
        }
        if (nr<=Nr)
        {
            sol=mij;
            dr=mij-1;
        }
        else st=mij+1;
    }
    printf("%d\n",sol);
    return 0;
}