Pagini recente » Cod sursa (job #2957666) | Cod sursa (job #777378) | Cod sursa (job #3292138) | Cod sursa (job #2774243) | Cod sursa (job #3261607)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int main()
{
int nrSaltele;
fin >> nrSaltele;
int nrMaxDrumuri;
fin >> nrMaxDrumuri;
int marimileSaltelelor[nrSaltele];
int salteaMax = 0;
for(int i = 0; i < nrSaltele; i++)
{
fin >> marimileSaltelelor[i];
if(marimileSaltelelor[i] > salteaMax)
salteaMax = marimileSaltelelor[i];
}
int capacitateMin = 256000000;
int st = salteaMax;
int dr = 256000000;
while(st <= dr)
{
int mij = (st + dr) / 2;
int capacitateCrt = mij;
int nrDrumuriCrt = 1;
int sumCamionCrt = 0;
for(int i = 0; i < nrSaltele; i++)
{
int salteaCrt = marimileSaltelelor[i];
if(sumCamionCrt + salteaCrt <= capacitateCrt)
{
sumCamionCrt += salteaCrt;
}
else
{
nrDrumuriCrt++;
sumCamionCrt = 0;
sumCamionCrt += salteaCrt;
}
}
if(nrDrumuriCrt <= nrMaxDrumuri)
{
capacitateMin = capacitateCrt;
dr = mij - 1;
}
else if (nrDrumuriCrt > nrMaxDrumuri)
{
st = mij + 1;
}
}
fout << capacitateMin << '\n';
return 0;
}