Pagini recente » Cod sursa (job #1368373) | Cod sursa (job #2126893) | Cod sursa (job #1240704) | Cod sursa (job #366080) | Cod sursa (job #1045234)
#include<fstream>
using namespace std;
short n, k, *v;
bool depaseste (short capacitate)
{
int sum = 0, drumuri = 1;
for (short i = 0; i < n; i++)
{
sum += v[i];
if (sum > capacitate)
{
sum = v[i];
drumuri++;
if (drumuri > k)
return true;
}
}
return false;
}
int main()
{
int lim_s, lim_d, step;
bool atribuit = false;
ifstream f ("transport.in");
f >> n >> k;
v = new short[n];
f >> v[0];
lim_s = lim_d = v[0];
for (short i = 1; i < n; i++)
{
f >> v[i];
lim_d += v[i];
if (lim_s < v[i])
lim_s = v[i];
}
f.close();
ofstream g ("transport.out");
if (k >= lim_d)
g << lim_s;
else
{
for (step = 1; step < lim_d; step <<= 1);
for (lim_s = 0; step; step >>= 1)
if (lim_s + step < lim_d && depaseste(lim_s + step))
{
lim_s += step;
atribuit = true;
}
if (atribuit)
g << lim_s + 1;
else
g << lim_s;
}
g.close();
return 0;
}