Pagini recente » Cod sursa (job #2505770) | Cod sursa (job #2852155) | Cod sursa (job #3211844) | Cod sursa (job #1287770) | Cod sursa (job #2703958)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("transport.in");
ofstream fout ("transport.out");
int n, k;
int st[16000];
int nrTransporturi (int cap){
int dim, transporturi;
dim = 0;
transporturi = 0 ;
for(int i=0; i<n; i++){
if(dim + st[i] > cap){
transporturi++;
dim = st[i];
}
else{ //stiu sigur ca st[i] incape intr-un transport din limitele cautarii binare
dim += st[i];
}
}
transporturi++;
//cout<<"cap= "<<cap<<"\ntransporturi= "<<transporturi<<"\n\n";
return transporturi;
}
int main()
{
fin>>n>>k;
int mn=0, suma=0, p, u, mij, sol;
for(int i=0; i<n; i++){
fin>>st[i];
mn = max(mn, st[i]);
suma += st[i];
}
//fac o cautare binara dupa rezultat
p = mn;
u = suma;
while(p <= u){
mij = (p + u) / 2;
if ( nrTransporturi(mij) <= k ){
sol = mij;
u = mij - 1;
//daca numarul de transporturi este mic, ii scad capacitatea, adica u = mij - 1, sa vad cu cate nr transporturi ramane acum
}
else{
p = mij + 1;
}
}
fout<<sol;
}