Pagini recente » Cod sursa (job #2279005) | Cod sursa (job #1126084) | Cod sursa (job #1148432) | Cod sursa (job #163982) | Cod sursa (job #2071244)
#include <fstream>
#define NMAX 16000
#define LIM 27
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int n, k, maxim;
int v[NMAX], suma[NMAX];
bool nrdrumuri(int c) {
int nr = 1, poz = 0;
for (int i = 1; i <= n; i++) {
if (suma[i] - suma[poz] > c) {
poz = --i;
nr++;
}
}
//out << nr << '\n';
return (nr <= k);
}
void cautbin() {
int pas = 1 << LIM, r = maxim - 1;
while (pas != 0) {
if (!nrdrumuri(r + pas)) {
r += pas;
}
pas >>= 1;
}
out << r + 1;
}
int main()
{
in >> n >> k;
for (int i = 1; i <= n; i++) {
in >> v[i];
suma[i] = suma[i - 1] + v[i];
if (maxim < v[i]) {
maxim = v[i];
}
}
//out << nrdrumuri(8) << '\n';
cautbin();
return 0;
}