Pagini recente » Cod sursa (job #3037816) | Cod sursa (job #553613) | Cod sursa (job #221434) | Cod sursa (job #3179932) | Cod sursa (job #836725)
Cod sursa(job #836725)
#include <cstdio>
#include <cassert>
#define dim 16005
int n=0,k=0,v[dim];
int check(int x)
{
int as=0,i=0,p=k;
while (as+v[i]<x+1 && i<n)
{
as=as+v[i++];
if(as+v[i]>x)
{
--p;
as=0;
if(p==0)
break;
}
}
if(i<n+1)
return 1;
else
return 0;
}
int main()
{
int answer=-1,sl=0,sd=0,mid=0,i=0,max=0;
assert(freopen("transport.in","r",stdin));
assert(freopen("transport.out","w",stdout));
scanf("%d%d",&n,&k);
for (i=0; i<n; ++i)
{
scanf("%d",&v[i]);
sd+=v[i];
max=(v[i]>max)?v[i]:max;
}
sl=sd/k;
if (max+1>sl)
sl=max+1;
while (sl<sd+1)
{
mid=(sl+sd)/2;
if (check(mid)==1)
{
answer=mid;
sd=mid-1;
}
else
sl=mid+1;
}
printf("%d\n",answer);
fclose(stdin);
fclose(stdout);
return 0;
}