Pagini recente » Cod sursa (job #2532096) | Cod sursa (job #905990) | Cod sursa (job #799350) | Cod sursa (job #1481459) | Cod sursa (job #448629)
Cod sursa(job #448629)
#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;
ok=1;
for (i=1;i<=n && ok;i++)
if (x[i]>m)
ok=0;
if (ok)
{
for (i=1;i<=n+1;i++)
{
if (sp[i]-vs>m)
{
nk++;
vs=sp[i-1];
}
}
}
if (sp[n]-vs>m)
nk=0;
if (nk<k && nk)
{
if (m<min)
min=m;
dr=m-1;
}
else
{if (min>m && nk)
min=m;
st=m+1;}
}
if (min==min2)
printf("%ld\n",sp[n]);
else
printf("%ld\n",min);
return 0;
}