Pagini recente » Monitorul de evaluare | Cod sursa (job #128345) | Cod sursa (job #1791866) | Monitorul de evaluare | Cod sursa (job #953064)
Cod sursa(job #953064)
#include <fstream>
#include <algorithm>
using namespace std;
#define in "transport.in"
#define out "transport.out"
#define N 16005
int v[N], n, k, s, MIN = -1;
bool Try (int s) {
int d = 1, tmp = 0;
for (int i = 0; i < n; ++i)
if (tmp + v[i] <= s)
tmp += v[i];
else {
d++;
tmp = v[i];
}
if (d > k)
return false;
return true;
}
int BS () {
int lo = MIN, hi = s + 1, sol = s;
while (lo < hi) {
int mid = (lo + hi) >> 1;
if (Try(mid)) {
sol = mid;
hi = mid;
}
else
lo = mid + 1;
}
return sol;
}
int main () {
ifstream fin (in);
fin >> n >> k;
for (int i = 0; i < n; ++i) {
fin >> v[i];
s += v[i];
MIN = max (v[i], MIN);
}
fin.close();
ofstream fout (out);
int sol = BS ();
fout << sol;
fout.close();
return 0;
}