Pagini recente » Cod sursa (job #3226173) | Cod sursa (job #71800) | Cod sursa (job #3184488) | Cod sursa (job #1416354) | Cod sursa (job #2730983)
#include <iostream>
#include <fstream>
#define DIM 16005
#define INF 2000000000
using namespace std;
ifstream fi("transport.in");
ofstream fo("transport.out");
bool check_capacity(int S[], int n, int k, int cap) {
int nrd=0, scrt = 0;
for(int i=1;i<=n+1;i++) {
if(scrt+S[i] <= cap) {
scrt+=S[i];
} else {
scrt=S[i];
nrd++;
}
}
return nrd<=k;
}
int find_capacity(int S[], int n, int k) {
int left = 0, right = 0;
for(int i=1;i<=n;i++) {
left=max(left, S[i]);
right+=S[i];
}
while(left<right) {
int mid = (left+right)/2;
if(check_capacity(S, n, k, mid))
right = mid;
else
left = mid+1;
}
return left;
}
int main() {
int n,k;
int S[DIM];
fi>>n>>k;
for(int i=1;i<=n;i++) {
fi>>S[i];
}
S[n+1] = INF;
fo<<find_capacity(S, n, k);
return 0;
}