Pagini recente » Cod sursa (job #2289037) | Cod sursa (job #3032724) | Cod sursa (job #1964318) | Cod sursa (job #2438648) | Cod sursa (job #2891580)
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 16000
ifstream in("transport.in");
ofstream out("transport.out");
int n, k, mx;
int v[NMAX + 1];
bool fct(int cap)
{
int nr = 0, cc = 0;
for (int i = 1; i <= n; ++i)
{
if (v[i] > cc)
{
++nr;
cc = cap;
}
if (v[i] > cc)
return false;
if (nr > k)
return false;
cc -= v[i];
}
return true;
}
int caut_bin(int s, int mx)
{
int pas = 1 << 27, r = mx - 1;
while (pas != 0) {
if (fct(r + pas) == 0 && r + pas <= s) {
r += pas;
}
pas >>= 1;
}
++r;
return r;
}
int main()
{
in >> n >> k;
int s = 0;
mx = -1;
for (int i = 1; i <= n; ++i)
{
in >> v[i];
mx = max(mx, v[i]);
s += v[i];
}
out << caut_bin(s, mx);
return 0;
}