Cod sursa(job #1405336)

Utilizator rexlcdTenea Mihai rexlcd Data 29 martie 2015 01:53:31
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <cstdio>

using namespace std;

int v[16002],i,n,k,s;

bool check(int x)
{
    int tr=0,s=0;
    for(int i=1;i<=n;i++)
    {
        if(v[i]>x)
            tr=k+1, i=n+1;
        if(v[i]+s<=x)
            s+=v[i];
        else
            s=v[i], tr++;
    }
    if(tr<=k)
        return 1;
    return 0;
}

int cb()
{
    int st=1,dr=s,m,p=0;
    while(st<=dr)
    {
        m=(st+dr)/2;
        if(check(m))
        {
            p=m;
            dr=m-1;
        }
        else
            st=m+1;
    }
    return p;
}

int main()
{
    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]);
        s+=v[i];
    }
    printf("%d\n", cb()+1);
    fclose(stdin);
    fclose(stdout);
    return 0;
}