Pagini recente » Cod sursa (job #1902401) | Cod sursa (job #1533823) | Borderou de evaluare (job #1236698) | Cod sursa (job #2191593) | Cod sursa (job #448620)
Cod sursa(job #448620)
#include<stdio.h>
long x[16001];
long sp[16002];
int main()
{
long n,k,i,m,min=1000000000,nk,s=0,vs,st,dr,min2,ok=1;
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
scanf("%ld%ld",&n,&k);
for (i=1;i<=n;i++)
{
scanf("%ld",&x[i]);
sp[i]=sp[i-1]+x[i];
}
st=1;
dr=sp[n];
min2=min;
sp[n+1]=sp[n]+10;
while (st<=dr)
{
m=(st+dr)/2;
nk=0;
s=0;
vs=0;
for (i=1;i<=n+1;i++)
{
if (sp[i]-vs>m)
{
nk++;
vs=sp[i-1];
}
}
if (nk<=k)
{
if (m<min && nk)
min=m;
dr=m-1;
}
else
st=m+1;
}
if (min==min2)
printf("%ld\n",sp[n]);
else
printf("%ld\n",min);
return 0;
}