Có n chiếc xe đạp, mỗi xe đầy bình đi được 100 km. Tìm khoảng cách tối đa có thể đi được bằng cách chuyển nhiên liệu giữa các xe.
Ví dụ: n=3, fuel=100 → kết quả 183.33 km.
Giải thuật
Chiến lược tối ưu: chạy song song, chuyển nhiên liệu từ xe cuối cho các xe trước, bỏ xe cuối khi hết nhiên liệu. Khoảng cách cộng thêm ở mỗi bước là fuel / số_xe_còn_lại.
- Khởi tạo covered_distance = 0.
- Khi n > 0: covered_distance += fuel / n; n -= 1.
- Trả về covered_distance.
Công thức: 100 * (1 + 1/2 + 1/3 + ... + 1/n) - dãy hòa điều.
Ví dụ
def maximum_distance(n, fuel):
covered_distance = 0
while n > 0:
covered_distance += fuel / n
n -= 1
return covered_distance
n = 3
fuel = 100
print(maximum_distance(n, fuel))Đầu vào
3, 100
Đầu ra
183.33333333333334