Cod sursa(job #217323)
#include<stdio.h>
FILE *fin=fopen("transport.in","r"),
*fout=fopen("transport.out","w");
int N,K,a[17000],li,lf;
int verif(int i){
int nr=0,s=0;
for(int j=1;j<=N;j++)
if(s-a[j]>=0)
s-=a[j];
else{
s=i-a[j];
nr++;
}
if(nr<=K)
return 1;
return 0;
}
int main(){
fscanf(fin,"%d %d",&N,&K);
for(int i=1;i<=N;i++){
fscanf(fin,"%d",&a[i]);
lf+=a[i];
if(li<a[i])
li=a[i];
}
while(lf-li>1){
int mij=(li+lf)/2;
if(verif(mij))
lf=mij;
else
li=mij;
}
if(verif(li))
fprintf(fout,"%d\n",li);
else
fprintf(fout,"%d\n",lf);
fclose(fin);
fclose(fout);
return 0;
}