Cod sursa(job #155571)

Utilizator DorinOltean Dorin Dorin Data 12 martie 2008 00:14:00
Problema Transport Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
# include <stdio.h>
# include <vector>

using namespace std;

# define input "transport.in"
# define output "transport.out"

# define MAX 1605

long i,j,n,k,st,dr,mij;
long a[MAX];

bool posibil(int cap)
{
     int nr = 0;
     for(i=1;i<=n;)
     {
         int s = a[i];
         for(i++;i<=n && s+a[i] <= cap;i++)  
            s+=a[i];
         nr ++;
     }
     if(nr <= k)
           return true;
     return false;
}

int main()
{
    freopen(input, "r", stdin);
    freopen(output, "w", stdout);

    scanf("%ld%ld",&n,&k);
    dr = 0;
    st = 0;
    for(i=1;i<=n;i++)
    {
       scanf("%ld",&a[i]);
       dr+=a[i];
       if(a[i] > st)
           st = a[i];
    }
    dr/=k;
    dr*=2;
    while(st < dr)
    {
             int mij = (st + dr) >> 1;
             if(posibil(mij))
                dr = mij;
             else
                 st = mij+1;
    }
    printf("%ld",st);

    return 0;
}