Pagini recente » Cod sursa (job #1098674) | Cod sursa (job #908677) | Cod sursa (job #1862160) | Cod sursa (job #2475503) | Cod sursa (job #1045490)
#include<fstream>
using namespace std;
short n, k, *v;
bool depaseste (int capacitate)
{
int sum = 0;
short 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;
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();
for (step = 1; step < lim_d; step <<= 1);
for ( ; step; step >>= 1)
if (lim_s + step < lim_d && depaseste(lim_s + step))
lim_s += step;
ofstream g ("transport.out");
if (!depaseste(lim_s))
g << lim_s;
else
g << lim_s + 1;
g.close();
return 0;
}