Pagini recente » Cod sursa (job #3359941) | Cod sursa (job #3359945) | Cod sursa (job #3360422) | Monitorul de evaluare | Cod sursa (job #3360478)
#include <stdio.h>
#include <stdlib.h>
int v[16000];
int main()
{
FILE *fin, *fout;
fin=fopen("transport.in", "r");
fout=fopen("transport.out", "w");
int n, k, c, s=0, cnt=1, i;
long long sum=0, max=0, st, dr, mij;
fscanf(fin, "%d%d", &n, &k);
for(i=1; i<=n; i++){
fscanf(fin, "%d", &v[i]);
}
for(i=1; i<=n; i++){
if(v[i]>max){
max=v[i];
}
}
for(i=1; i<=n; i++){
sum=sum+v[i];
}
st=max;
dr=sum;
while(st <= dr){
mij=(st+dr)/2;
s=0;
cnt=1;
for(i=1; i<=n; i++){
if(s+v[i]<=mij){
s=s+v[i];
}else{
cnt++;
s=v[i];
}
}
if(cnt<=k){
c=mij;
dr= mij-1;
}else{
st=mij+1;
}
}
fprintf(fout, "%d", c);
return 0;
}