Pagini recente » Cod sursa (job #2667965) | Cod sursa (job #1212015) | Cod sursa (job #1166308) | Cod sursa (job #1310427) | Cod sursa (job #2980463)
#include <fstream>
using namespace std;
ifstream cin ("transport.in");
ofstream cout ("transport.out");
int lungime , sir[16000];
int main ()
{
int limita;
cin >> lungime >> limita >> sir[0];
int maxim = sir[0];
for (int indice = 1 ; indice < lungime ; indice++)
{
cin >> sir[indice];
if (sir[indice] > maxim)
maxim = sir[indice];
}
int stanga = 1 , dreapta = 256000000 , capacitate = 256000000;
while (stanga <= dreapta)
{
int mijloc = (stanga + dreapta) / 2;
if (mijloc >= maxim)
{
int actual = 0 , transporturi = 1;
for (int indice = 0 ; indice < lungime && transporturi <= limita ; indice++)
if (actual + sir[indice] <= mijloc)
actual += sir[indice];
else
actual = sir[indice] , transporturi++;
if (transporturi > limita)
stanga = mijloc + 1;
else
dreapta = mijloc - 1 , capacitate = mijloc;
}
else
stanga = mijloc + 1;
}
cout << capacitate;
cout.close(); cin.close();
return 0;
}