Pagini recente » Cod sursa (job #1559207) | Cod sursa (job #2055463) | Cod sursa (job #3229625) | Cod sursa (job #1180408) | Cod sursa (job #1700581)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 16000
int v[MAXN], n;
int nTransporturi(int cap){
int sum=0, ind=0, transp=0;
while(ind<n){
sum+=v[ind];
if(sum>cap){
sum=v[ind];
transp++;
}
ind++;
}
if(sum>0)
transp++;
return transp;
}
int main(){
int k;
FILE*fi,*fo;
fi=fopen("transport.in","r");
fo=fopen("transport.out","w");
fscanf(fi,"%d%d", &n, &k);
int max=0, sum=0;
for(int i=0;i<n;i++){
fscanf(fi,"%d", &v[i]);
if(v[i]>max)
max=v[i];
sum+=v[i];
}
int st=max, dr=sum;
while(dr-st>1){
int m=(st+dr)/2;
if(nTransporturi(m)>k)
st=m+1;
else
dr=m;
}
if(nTransporturi(st)<=k)
fprintf(fo,"%d", st);
else
fprintf(fo,"%d", dr);
fclose(fi);
fclose(fo);
return 0;
}