Xe quay 4 buồng, mỗi buồng 4 khách. Mảng cust[i] = khách chờ trước vòng i. Mỗi khách trả board, mỗi vòng tốn run. Khách không chờ nếu có chỗ trống. Tìm số vòng nhỏ nhất để lợi nhuận tối đa.
Ví dụ: cust=[6,4], board=6, run=4 → 3 vòng. Lợi nhuận max = 10*6 - 3*4 = 48.
Giải thuật (Mô phỏng + tối ưu vòng cuối)
- Mô phỏng từng vòng trong
cust: cập nhật khách chờwt, lên xechg = min(4, wt), cập nhật lợi nhuận tích lũytmp, theo dõi maxmstvà vòngres. - Sau mảng
cust, cònwtkhách chờ. Tính thêm: mỗi 4 khách cho 1 vòng nếu4*board > run; khách lẻythêm 1 vòng nếuy*board > run. - Trả về
res.
Ví dụ minh họa
def solve(cust, board, run):
res = -1
mst = 0
tmp = 0
wt = 0
for idx, val in enumerate(cust):
wt += val
chg = min(4, wt)
wt -= chg
tmp += chg * board - run
if mst < tmp:
res, mst = idx + 1, tmp
x, y = divmod(wt, 4)
if 4 * board > run:
res += x
if y * board > run:
res += 1
return res
print(solve([6,4], 6, 4))
Đầu vào
[6,4], 6, 4
Đầu ra
3