Pagini recente » Cod sursa (job #2366724) | Cod sursa (job #82118) | Cod sursa (job #1756300) | Cod sursa (job #998153) | Cod sursa (job #500861)
Cod sursa(job #500861)
#include<stdio.h>
FILE*fin,*fout;
long int n, k,k1,i,v[2000],min,t,u,p,m,nr,max;
int main(){
fin=fopen("transport.in","r");
fout=fopen("transport.out","w");
fscanf(fin,"%ld %ld",&n,&k);
for(i=1;i<=n;i++){
fscanf(fin,"%ld ",&v[i]);
k1=k1+v[i];
if(v[i]>max){max=v[i];}
}
u=max; p=k1;
min=16001;
while(u<=p){
m=(u+p)/2;
t=v[1]; nr=1; i=2;
for(i=2;i<=n;i++){
if (v[i]>m){nr=k+1;break;}
if(v[i]+t>=m){nr++;if(v[i]+t>m){t=v[i];}
if(v[i]+t==m){t=0;}
}
else{t=t+v[i];}
}
if(nr>k){u=m+1;}
if(nr<=k){
if(m<min){min=m;p=m-1;}
}
}
fprintf(fout,"%ld",min);
return 0;
}