Cod sursa(job #247927)

Utilizator DraStiKDragos Oprica DraStiK Data 24 ianuarie 2009 14:34:40
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>
#define DIM 16005
int n,k,max,sum,sol;
int a[DIM];
void read ()
{
    int i;
    scanf ("%d%d",&n,&k);
    for (i=1; i<=n; ++i)
    {
        scanf ("%d",&a[i]);
        if (a[i]>max)
            max=a[i];
        sum+=a[i];
    }
}
void solve ()
{
    int in=max,sf=sum,mij,i,s,nrs;
    while (in<=sf)
    {
        mij=(in+sf)/2;
        s=nrs=0;
        for (i=1; i<=n; ++i)
        {
            s+=a[i];
            if (s>mij)
            {
                s=a[i];
                ++nrs;
            }
        }
        ++nrs;
        if (nrs>k)
            in=mij+1;
        else
        {
            sol=mij;
            sf=mij-1;
        }
    }
}
int main ()
{
    freopen ("transport.in","r",stdin);
    freopen ("transport.out","w",stdout);    
    read ();
    solve ();
    printf ("%d",sol);
    return 0;
}