Pagini recente » Cod sursa (job #191076) | Cod sursa (job #73408) | Cod sursa (job #3231292) | Cod sursa (job #2440456) | Cod sursa (job #2834519)
#include <iostream>
#include <fstream>
using namespace std;
int stiva[16005];
ifstream fin("transport.in");
ofstream fout("transport.out");
bool incape(int capacitate, int k, int n)
{
int sum=0, nrtrans=0;
for(int i=1; i<=n; i++)
{
sum+=stiva[i];
if(sum>capacitate)
{
nrtrans++;
sum=stiva[i];
}
}
return nrtrans+1<=k;
}
int bs(int maxim, int s, int k, int n)
{
int lf=maxim, rg=s, capacitate=-1;
while(lf<=rg)
{
int med=(lf+rg)/2;
if(incape(med, k, n))
{
rg=med-1;
capacitate=med;
}
else
lf=med+1;
}
return capacitate;
}
int main()
{
int n, k, maxim=-1, s=0;
fin>>n>>k;
for(int i=1; i<=n; i++)
{
fin>>stiva[i];
if(stiva[i]>maxim)
maxim=stiva[i];
s+=stiva[i];
}
fout<<bs(maxim, s, k, n);
return 0;
}