Pagini recente » Cod sursa (job #141567) | Arhiva de probleme | porc | Cod sursa (job #2220153) | Cod sursa (job #2178729)
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
const int NMAX = 16005;
int vec[NMAX], n, k;
int main() {
fin >> n >> k;
for (int i = 1; i <= n; ++ i)
fin >> vec[i];
fin.close();
int ans = NMAX;
// se cauta binar valoarea ceruta
int lo = 1, hi = NMAX;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
int cnt = 1, qty = mid;
bool ok = true;
for (int i = 1; i <= n && ok; ++ i) {
if (vec[i] > mid) {
// exista o saltea cu dimensiunea mai mare decat a camionului
ok = false;
}
else {
if (vec[i] <= qty) {
// salteaua curenta se poate pune in camionul curent
qty -= vec[i];
}
else {
// trebuie un nou camion
++ cnt;
qty = mid - vec[i];
}
}
}
if (ok && cnt <= k) {
if (mid < ans)
ans = mid;
hi = mid - 1;
}
else
lo = mid + 1;
}
fout << ans << "\n";
fout.close();
return 0;
}