Pagini recente » Cod sursa (job #841144) | Monitorul de evaluare | Cod sursa (job #2906353) | Cod sursa (job #2911044) | Cod sursa (job #2904944)
#include <fstream>
#define NMAX 16005
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n,k,v[NMAX],nrt=0,i,j,tr,vmax,s1,c,s,st,dr,mij;
int transporturi(int capacitate)
{
int s1=v[1],nt=1;
for(int i =2 ;i <= n; i++)
if(s1+v[i] <= capacitate)
s1+=v[i];
else
{
nt++;
s1=v[i];
}
return nt;
}
int main()
{
fin>> n >> nrt;
for(i = 1 ;i <= n; i++)
{
fin>>v[i];
if(v[i]>vmax)
vmax=v[i];
s+=v[i];
/// incerc valorile posibilie pt capacitate
}
/// caut binar o solutie pt prob
///cu cta capacitatea este mai mare, cu atat nr de transporturi este mai mic
st=vmax,dr=s;
while(st<=dr)
{
mij=(st+dr)/2;
///cate transporturi se fac cu capacitatea mij
tr= transporturi(mij);
if(tr > nrt)
st=mij+1;
else
{
c=mij;
dr=mij-1;
}
}
fout<<c;
}