Cod sursa(job #298814)

Utilizator AnDrEwBoYA Andrei AnDrEwBoY Data 6 aprilie 2009 13:24:52
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>

#define MAX_N 17000

int n,k,v[MAX_N],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 = 0;
  return t;
}

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

int main()
{
    int i,min = -17000;
    long max = 0;
    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];
    }
    search(min,max);    
    printf("%d",sol);    
    fclose(stdin); fclose(stdout);
    return 0;
}