Pagini recente » Cod sursa (job #344697) | Cod sursa (job #2512054) | Cod sursa (job #2773148) | Cod sursa (job #1525704) | Cod sursa (job #2919384)
/*
7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14
*/
#include <fstream>
using namespace std;
ifstream fin ("transport.in");
ofstream fout("transport.out");
const int DIM = 16001;
int n, k, maxim = 0, sum = 0;
int v[DIM];
int check(int value) {
int currentVolume = 0, numberOfTransports = 0;
for (int i = 1; i <= n; i++) {
if (currentVolume + v[i] <= value)
currentVolume += v[i];
else {
currentVolume = v[i];
numberOfTransports++;
}
}
if (currentVolume > 0)
numberOfTransports++;
if (numberOfTransports > k)
return 1;
if (numberOfTransports < k)
return -1;
return 0;
}
int main() {
fin >> n >> k;
for (int i = 1; i <= n; i++) {
fin >> v[i];
maxim = max(maxim, v[i]);
sum += v[i];
}
int left = maxim, right = sum;
while (left <= right) {
int middle = (left + right) / 2;
if (check(middle) <= 0)
right = middle - 1;
else
left = middle + 1;
}
fout << left;
return 0;
}