Pagini recente » Cod sursa (job #98244) | Cod sursa (job #2694748) | Cod sursa (job #1712341) | Cod sursa (job #1242362) | Cod sursa (job #3262104)
#include <bits/stdc++.h>
using namespace std;
int v[20005];
bool checker(int capacitatea, int n, int k) {
int greutateCurenta = 0;
int numarTransporturi = 0;
for (int i = 1; i <= n; ++i) {
if (greutateCurenta + v[i] <= capacitatea) {
// daca pot sa adaug la transportul curent pe i, atunci il adaug si merg mai departe
greutateCurenta += v[i];
} else {
// daca nu pot, atunci imi formez tranportul curent si il numar
numarTransporturi += 1;
// resetez greutatea curenta
greutateCurenta = 0;
// scad i ul cu 1 ca impreuna cu ++i de la for, sa ajung iar inapoi la elementul curent
i -= 1;
}
if (numarTransporturi > k) {
return false;
}
}
numarTransporturi += 1;
if (numarTransporturi > k) {
return false;
} else {
return true;
}
}
int main()
{
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; ++i) {
cin >> v[i];
}
int left = 1, right = 1000000000;
while (left < right) {
int middle = (left + right) / 2;
if (checker(middle, n, k)) {
right = middle;
} else {
left = middle + 1;
}
}
cout << left;
return 0;
}