Pagini recente » Cod sursa (job #519547) | Cod sursa (job #2065140) | Cod sursa (job #3254803) | Monitorul de evaluare | Cod sursa (job #1517248)
#include <fstream>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
#define NMAX 16010
int n, k, v[NMAX], maxim, st, dr, mij, rez, suma;
int verif(int gMax)
{
int i, s, t;
s = 0;
t = 0;
for (i = 1;i <= n + 1;i++)
{
if (s + v[i] <= gMax)
{
s += v[i];
continue;
}
t++;
if (t > k) return 0;
s = v[i];
}
return 1;
}
int main()
{
int i, j;
f>>n>>k;
for (i = 1;i <= n;++i)
{
f>>v[i];
if (v[i] > maxim)
maxim = v[i];
suma += v[i];
}
v[n + 1] = 999999;
if (k >= n)
{
g<<maxim;
return 0;
}
if (k == 1)
{
g<<suma;
return 0;
}
st = maxim;
dr = suma;
while (st < dr)
{
mij = (st + dr) / 2;
if (verif(mij))
{
dr = mij;
rez = mij;
}
else st = mij + 1;
}
g<<rez;
}