Pagini recente » Cod sursa (job #1421585) | Cod sursa (job #3145488) | Cod sursa (job #2444780) | Cod sursa (job #3040827) | Cod sursa (job #496033)
Cod sursa(job #496033)
#include <cstdio>
int n,k,x[16006];
int transport(int c)
{
int i,s=0,t=0;
for(i=1;i<=n;i++)
{
if(x[i]>c)return k+1;
else {if(s+x[i]>c){s=x[i];t++;}else s+=x[i];}
}
if(s>0)
t++;
return t;
}
int bs()
{
int med,t,st,dr;
int last=-1;
st=1;dr=(1ul<<31)-1;
while(st<=dr)
{
med=st+((dr-st)>>1);
t=transport(med);
if(t>k)
{st=med+1;}
else
{dr=med-1;last=med;}
}
return last;
}
int main()
{
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
int i;
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
{
scanf("%d",&x[i]);
}
printf("%d\n",bs());
return 0;
}