Cod sursa(job #616518)

Utilizator SchumiDumitru Andrei Georgian Schumi Data 12 octombrie 2011 19:39:11
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>

using namespace std;

int v[16005],n,k;

int verifica(int sum)
{
    int s=0,c=1,i;
    for(i=1;i<=n;++i)
    {
        if(v[i]>sum)
            return 0;
        else
        {
            if(s+v[i]<sum)
                s+=v[i];
            else if(s+v[i]==sum)
            {
                s=0;
                ++c;
            }
            else
            {
                s=v[i];
                ++c;
            }
        }
    }
    if(c<=k) return 1;
    return 0;
}

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