Pagini recente » Cod sursa (job #1722054) | Cod sursa (job #2195833) | Cod sursa (job #1622889) | Cod sursa (job #620692) | Cod sursa (job #2178709)
#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 i = 1, cnt = 0;
while (i <= n) {
++ cnt; // numarul de transporuti
int qty = mid; // cantitatea disponibila
while (i <= n && vec[i] <= qty) {
// se umple camionul curent
qty -= vec[i ++];
}
if (cnt > k) {
/* este posibil ca capacitatea sa fie atat de mica, incat o saltea sa nu poata
incapea, programul ciclind */
break;
}
}
if (cnt <= k) {
if (mid < ans)
ans = mid;
hi = mid - 1;
}
else
lo = mid + 1;
}
fout << ans << "\n";
fout.close();
return 0;
}