Pagini recente » Cod sursa (job #3250866) | Cod sursa (job #2099890) | Cod sursa (job #1996740) | Cod sursa (job #22414) | Cod sursa (job #604057)
Cod sursa(job #604057)
#include<stdio.h>
int n,k,vec[16010],max,suma,cnt,cur,x;
void read()
{
freopen("transport.in","r",stdin);
scanf("%d %d",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&vec[i]);
if(vec[i]>max) max=vec[i];
suma+=vec[i];
}
}
int incearca(int val)
{
cnt=1,cur=0;
for(int i=1;i<=n;i++)
{
if(vec[i]+cur<=val) cur+=vec[i];
else cur=vec[i],cnt++;
if(cnt>k) return 0;
}
return 1;
}
void binary(int st,int dr)
{
if(st==dr-1) x=dr;
else if(incearca((st+dr)/2)==1) binary(st,(st+dr)/2);
else if(incearca((st+dr)/2)==0) binary((st+dr)/2,dr);
}
int main()
{
read();
binary(max,suma);
freopen("transport.out","w",stdout);
printf("%d",x);
}