Cod sursa(job #221384)

Utilizator cos_min_max_ionCosmin Ion cos_min_max_ion Data 16 noiembrie 2008 12:49:28
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<stdio.h>
int vol[16000], n, k;
int verif(int c)
{
 int cc=c, nr=k,i,j;
 for(i=0;i<n ;i++)
  {
   cc=c;
   if(vol[i]<=cc)
     {
      cc-=vol[i];
      for(j=i+1;j<n && vol[j]<=cc;j++)
        {
	 i++;
	 cc-=vol[j];
	}
      nr--;
     }

   else return 0;
  }
  if(nr>=0) return 1;
  return 0;
}
int main()
{
 int cmin=0,cmax=0,m,i;
 freopen("transport.in", "rt", stdin);
 freopen("transport.out", "wt", stdout);
 scanf("%d%d", &n, &k);
 for(i=0;i<n;i++)
  {
   scanf("%d", &vol[i]);
   cmax+=vol[i];
   if(vol[i]>cmin) cmin=vol[i];
  }
 while(cmin<cmax)
   {
    m=(cmin+cmax)/2;
    if(verif(m))
      cmax=m;
    else cmin=m+1;
   }
 if(verif(cmax))
   printf("%d\n", cmax);
  else printf("%d\n", cmin);



 return 0;
}