Cod sursa(job #130816)

Utilizator blasterzMircea Dima blasterz Data 1 februarie 2008 23:20:55
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <cstdio>
#include <string>
#define maxn 16001

int a[maxn];
int n, K, sum;

void read()
{
  freopen("transport.in","r",stdin);
  scanf("%d %d\n", &n, &K);
  for(int i=1;i<=n;++i) scanf("%d\n", a+i);
  for(int i=1;i<=n;++i) sum+=a[i];
}

inline int oki(int S)
{
  int i=1, k, s=0;
  for(k=1;k<=K;++k)
    {
      int ss=0;
      for(;i<=n;)
	if(ss+a[i]<=S) ss+=a[i++];
	else break;
      s+=ss;
    }
  if(s==sum) return 1;
  return 0;
}

void solve()
{
  int i, cnt;

  for(i=(1<<30), cnt=(1<<30); cnt; cnt>>=1)
    if(i-cnt>=0)
      if(oki(i-cnt))i-=cnt;
  freopen("transport.out","w",stdout);
  printf("%d\n", i);
  
}

int main()
{
  read();
  solve();
  return 0;
}