Cod sursa(job #312141)

Utilizator brainwashed20Alexandru Gherghe brainwashed20 Data 5 mai 2009 10:44:00
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<stdio.h>

#define X 17000

int n,k,v[X],sol=0;

int build(int min)
{
    int i,t=1,sum=0;

    for(i=0; i<n; i++)
      if(sum+v[i]<=min) sum+=v[i];
    else { t++; sum=v[i]; }

    return t;
}

void srch(int st, int dr)
{
   int mijl=st+(dr-st)/2;
   if(build(mijl)<=k)
   {
      sol=mijl;
      if(st<=mijl-1) srch(st,mijl-1);
   }
   else if(mijl+1<=dr) srch(mijl+1,dr);

}

int main()
{
    int i,max=0,min=-X;

    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);

    scanf("%d%d",&n,&k);

    for(i=0; i<n; ++i)
    {
       scanf("%d",&v[i]);
       max+=v[i];
       if(v[i]>min) min=v[i];
    }
    srch(min,max);

    printf("%d",sol);

    return 0;
}