Pagini recente » Cod sursa (job #506887) | Cod sursa (job #404906) | Cod sursa (job #7098) | Cod sursa (job #403913) | Cod sursa (job #2633546)
#include <fstream>
using namespace std;
const int NMAX = 16000;
int saltele[1 + NMAX];
int n, k, maxim;
bool verific(int valoare)
{
int nrTrans = 0;
int capCrt=0;
for (int i = 1; i <= n; i++)
{
capCrt = capCrt + saltele[i];
if (capCrt > valoare)
{
capCrt = saltele[i];
nrTrans++;
}
}
nrTrans++;
if (nrTrans > k)
return false;
return true;
}
int main()
{
ifstream f("transport.in");
ofstream g("transport.out");
f >> n >> k;
for (int i = 1; i <= n; i++)
{
f >> saltele[i];
if (saltele[i] > maxim)
{
maxim = saltele[i];
}
}
int st = maxim;
int dr = NMAX * NMAX;
int sol = NMAX * NMAX;
int mijloc;
while (st <= dr)
{
mijloc = (st + dr) / 2;
if (verific(mijloc))
{
sol = mijloc;
dr = mijloc - 1;
}
else
{
st = mijloc + 1;
}
}
g << sol;
return 0;
}