Cod sursa(job #967121)

Utilizator dyanagGrigore Diana dyanag Data 27 iunie 2013 10:12:51
Problema Transport Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <cstdio>
int n, k, i, v[16001], s, max, st, dr, m, nrk;
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]);
        if(max<v[i])
            max=v[i];
        s+=v[i];
    }
    st=max; dr=s; s=0; int pp=0;
    while(st<=dr){
        m=(st+dr)/2; nrk=1; s=0;
        for(i=1; i<=n; i++)
            if(s+v[i]<m)
                s+=v[i];
            else{
                nrk++;
                s=v[i];
            }
        if(k<nrk)
            st=m+1;
        else
            dr=m-1;
    }
    printf("%d", m);
return 0;
}