Pagini recente » Istoria paginii utilizator/voicumoldovan | Profil mndclaudiu | Monitorul de evaluare | Istoria paginii utilizator/motocel | Cod sursa (job #2912985)
#include <iostream>
#include <fstream>
using namespace std;
int n, k, v[16005], leftt, rightt, paths, summ, midd;
int main() {
ifstream fin("transport.in");
ofstream fout("transport.out");
fin >> n >> k;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
leftt = max(leftt, v[i]);
rightt += v[i];
}
while (leftt <= rightt) {
paths = 1, summ = 0;
midd = (leftt + rightt) / 2;
for (int i = 1; i <= n; ++i) {
if (summ + v[i] > midd) {
++paths;
summ = v[i];
} else {
summ += v[i];
}
}
if (paths > k) {
leftt = midd + 1;
} else {
rightt = midd - 1;
}
}
fout << leftt;
return 0;
}