Pagini recente » Cod sursa (job #371071) | Rating panic bossul (p4nic) | Cod sursa (job #2064397) | Cod sursa (job #591885) | Cod sursa (job #2904941)
#include <fstream>
#define NMAX 16005
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int v[NMAX],c,n,nrt,s,Vmax,tr,s1,st,dr,mij;
int transporturi(int cap){///calculez nr de transporturi daca am camioane cu capacitatea k
int s1=v[1],nt=1;
for(int i=2;i<=n;i++)
if(s1+v[i]<=cap)
s1+=v[i];
else{
nt++;
s1=v[i];
}
return nt;
}
int main(){
fin>>n>>nrt;
for(int i=1;i<=n;i++){
fin>>v[i];
if(v[i]>Vmax)
Vmax=v[i];
s+=v[i];
}
///incerc valorile posibile pentru capacitate
///caut binar o solutie pt problema
///cu cat capacitatea camionului este mai mare cu atat numarul de transporturi este mai mic
st=Vmax,dr=s;
while(st<=dr){
mij=(st+dr)/2;
///cate transporturi se fac folosind capacitatea mij
tr=transporturi(mij);
if(tr>nrt)
st=mij+1;
else{
c=mij;
dr=mij-1;
}
}
fout<<c;
}