Pagini recente » Statistici Eugen Iordanescu (eugeniord) | Cod sursa (job #3363827) | Autentificare | Cod sursa (job #3363830) | Cod sursa (job #3363700)
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n, k, v[16000];
bool verificare_capacitate(int mij) {
int i, tr = 1, dim = mij;
for ( i = 0; i < n && tr <= k; i ++ ) {
if ( dim >= v[i] ) {
dim = dim - v[i];
}
else {
tr ++;
dim = mij - v[i];
}
}
return tr <= k;
}
int cautare_binara_dimensiune(int maxim, int suma) {
int st = maxim - 1, dr = suma, mij;
while ( dr - st > 1) {
mij = ( st + dr ) / 2;
if ( verificare_capacitate(mij) ) {
dr = mij;
}
else {
st = mij;
}
}
return dr;
}
int main()
{
int i, maxim = 0, suma = 0, c;
fin >> n >> k;
for ( i = 0; i < n; i ++ ) {
fin >> v[i];
suma = suma + v[i];
if ( v[i] > maxim ) {
maxim = v[i];
}
}
c = cautare_binara_dimensiune(maxim, suma);
fout << c;
return 0;
}