Giả sử chúng ta đang chơi một trò chơi duy nhất và chúng ta có ba giá trị n, k và h. Chúng ta bắt đầu từ 0 điểm, sau đó chúng ta có thể chọn một số ngẫu nhiên từ 1 đến h (bao gồm cả) và chúng ta sẽ nhận được nhiều điểm đó. Chúng tôi dừng lại khi chúng tôi đã ghi được tối thiểu k điểm. Chúng ta phải tìm xác suất để chúng ta có n điểm trở xuống. Ở đây, bất kỳ số nào cũng có thể được chọn ngẫu nhiên và các kết quả đều có cùng xác suất.
Vì vậy, nếu đầu vào là n =2, k =2, h =10, thì đầu ra sẽ là 0,11.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Định nghĩa một hàm dp (). Điều này sẽ dẫn đường.
-
nếu đường dẫn giống k - 1, thì
-
return (tối thiểu là n - k + 1 và h) / h
-
-
nếu đường dẫn> n, thì
-
trả về 0
-
-
nếu đường dẫn> =k, thì
-
trả lại 1
-
-
trả về dp (đường dẫn + 1) - (dp (đường dẫn + h + 1) - dp (đường dẫn + 1)) / h
-
-
Từ chức năng chính, thực hiện như sau -
-
nếu k bằng 0 thì
-
trả lại 1
-
-
nếu n
-
trả về 0
-
-
trả về dp (0)
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
class Solution: def solve(self, n, k, h): if not k: return 1 if n < k: return 0 def dp(path): if path == k− 1: return min((n− k + 1), h) / h if path > n: return 0 if path >= k: return 1 return dp(path + 1)− (dp(path + h + 1)− dp(path + 1)) / h return dp(0) ob = Solution() print(ob.solve(2,2,10))
Đầu vào
2,2,10
Đầu ra
0.11