Pagini recente » Cod sursa (job #1454863) | Cod sursa (job #2183457) | Cod sursa (job #261216) | Cod sursa (job #457229) | Cod sursa (job #589307)
Cod sursa(job #589307)
#include <cstdio>
#define MAXN 16000
int trans(int *S, int N, int K, int c){
int i, aux, t;
aux=0; t=1;
for(i=0; i<N; i++){
if(aux+S[i]<=c)
aux+=S[i];
else {
t++;
aux=S[i];
}
}
if(t<=K)
return 0;
else
return t;
}
int bin(int l, int r, int *S, int N, int K){
int mid;
while(l<r){
mid=((r-l)>>1)+l;
if(!trans(S, N, K, mid))
r=mid-1;
else
l=mid+1;
}
mid=((r-l)>>1)+l;
if(!trans(S, N, K, mid))
return mid;
else
return mid++;
}
int main(){
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
int N, K, S[MAXN+10], i, max, sum, res;
max=0; sum=0;
scanf("%d%d", &N, &K);
for(i=0; i<N; i++){
scanf("%d", S+i);
if(S[i]>max)
max=S[i];
sum+=S[i];
}
res=bin(max, sum, S, N, K);
printf("%d\n", res);
return 0;
}