Cod sursa(job #63435)

Utilizator crawlerPuni Andrei Paul crawler Data 28 mai 2007 17:35:51
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <cstdio>

using namespace std;

#define pow(q) (1<<(q))

int v[16100],n;

int nr(int cap)
 {
  ++n;
  int tmp = 0, ret = 1, i;
  for(i=1;i<=n;++i)
   {
    tmp+=v[i];
    if(tmp > cap)
     tmp=v[i], ++ret;
   }
  --n;
  return ret;
 }

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

  int i,tmp,S=0,k,t=0;

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

  for(i=1;i<=n;++i)
   {
    scanf("%d",&v[i]);
    if(v[i] > t)
     t = v[i];
    S += v[i];
   }

  for(i=26;i>=0;--i)
   if(t + pow(i) <= S)
    {
     tmp = nr(t+pow(i));
     if(tmp>k)
      t+=pow(i);
    }

  while(t <= S && nr(t) > k) ++t;
  
  printf("%d\n",t);

  return 0;
 }