Pagini recente » Cod sursa (job #2945610) | Cod sursa (job #43421) | Cod sursa (job #1797008) | Cod sursa (job #1109203) | Cod sursa (job #3142097)
#include <fstream>
using namespace std;
const int Nmax = 16005;
int n, k, a[Nmax];
int cate_drumuri(int cap) {
int nr = 1, volum = 0;
for(int i = 1; i <= n; i++) {
if(volum + a[i] <= cap) {
volum += a[i];
}
else {
nr++;
volum = a[i];
}
}
return nr;
}
int main() {
int left = 0, right = 0;
ifstream fin("transport.in");
ofstream fout("transport.out");
fin >> n >> k;
for(int i = 1; i <= n; i++) {
fin >> a[i];
left = max(left, a[i]);
right += a[i];
}
int sol;
while(left <= right) {
int mid = (left + right) / 2;
int nr = cate_drumuri(mid);
if (nr <= k) { // capacitatea mid e buna, dar cautam una mai buna (mai mica)
sol = mid;
right = mid - 1;
}
else { // capacitatea mid nu e buna, ne trebuie una mai mare
left = mid + 1;
}
}
fout << sol << "\n";
return 0;
}