Pagini recente » Cod sursa (job #1951872) | Cod sursa (job #2536018) | Cod sursa (job #162311) | Cod sursa (job #473717) | Cod sursa (job #496325)
Cod sursa(job #496325)
#include<stdio.h>
int n,k,s[16010],t;
int transporturi(int c)
{
int cap=0,i,nd=0;
for(i=1;i<=n;i++)
if(s[i]>c)
return k+1;
else
if(cap+s[i]<=c)
cap=cap+s[i];
else
{
nd++;
cap=s[i];
}
if(cap>0)
nd++;
return nd;
}
int bs()
{
int st=1,dr=t,med,d,last;
while(st<=dr)
{
med=(st+dr)/2;
d=transporturi(med);
if(d>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",&s[i]);
t=t+s[i];
}
printf("%d\n",bs());
return 0;
}