Pagini recente » Cod sursa (job #2708333) | Cod sursa (job #344154) | Cod sursa (job #924811) | Cod sursa (job #1675509) | Cod sursa (job #2876973)
#include <iostream>
#include <fstream>
using namespace std;
int check (int n, int k, int v[], int w) {
int count = 1;
int i = 0, s = 0;
while (i < n) {
if (v[i] > w)
return 0;
if (v[i] + s <= w) {
s = s + v[i];
i++;
} else {
s = 0;
count++;
}
}
if (count <= k)
return 1;
return 0;
}
int main() {
int n, k;
ifstream infile;
infile.open("transport.in");
ofstream outfile;
outfile.open("transport.out");
infile>>n;
infile>>k;
int v[n];
int maxim = 0;
int minim = 1000000000;
for (int i = 0; i < n; i++) {
infile>>v[i];
maxim = maxim + v[i];
if (minim > v[i]) {
minim = v[i];
}
}
int left = minim, right = maxim, middle = (left + right) / 2;
while (right - left > 1) {
middle = (left + right) / 2;
if (check(n, k, v, middle)) {
right = middle;
} else {
left = middle;
}
}
outfile<<right;
return 0;
}