Pagini recente » Cod sursa (job #1976675) | Cod sursa (job #2523282) | Cod sursa (job #2964017) | Cod sursa (job #2860498) | Cod sursa (job #1838039)
#include <fstream>
using namespace std;
#define NMAX 17002
ifstream fin("transport.in");
ofstream fout("transport.out");
int N, K;
int v[NMAX];
//verificam daca ne ajung camioane de volum x pentru a cara saltelele
bool verif(int x) {
int trans = 0, i = 0;
while (trans <= K && i <= N) {
int volum = 0;
while (volum + v[i] <= x) {
volum += v[i];
i++;
}
trans++;
}
if (trans <= K)
return true;
return false;
}
// cautam binar numarul minim de transporturi
int Bsearch(int st, int dr) {
int sol;
while (st <= dr) {
int mid = st + ((dr - st) >> 1);
if (!verif(mid))
st = mid + 1;
else{
dr = mid - 1;
sol = mid;
}
}
return sol;
}
int main() {
fin >> N >> K;
int st = -1, dr = 0;
for (int i = 1; i <= N; ++i) {
fin >> v[i];
dr += v[i];
if (v[i] > st)
st = v[i];
}
fout << Bsearch(st, dr);
return 0;
}