Giả sử chúng ta có hai số n và k. Ở đây n đại diện cho số lượng trò chơi chúng ta sẽ chơi. Chúng ta phải tìm xem có bao nhiêu cách để có thể thắng liên tiếp k hoặc ít ván hơn. Nếu câu trả lời quá lớn, hãy sửa đổi kết quả bằng 10 ^ 9 + 7.
Vì vậy, nếu đầu vào là n =3 k =2, thì đầu ra sẽ là 7, vì những cách khả thi mà chúng ta có thể giành chiến thắng 2 lần trở xuống liên tiếp, là ["LLL", "WLL", "LWL", "LLW", "WWL", "LWW", "WLW"]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- m:=1 ^ 9 + 7
- Định nghĩa một hàm dp (). Điều này sẽ đưa tôi, K
- nếu tôi> =n hoặc K> k, thì
- trả về true khi K <=k, ngược lại là false
- return dp (i + 1, 0) mod m + dp (i + 1, K + 1) mod m
- Từ phương pháp chính, hãy thực hiện như sau -
- return dp (0, 0) mod m
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
def solve(n, k): m = 1**9 + 7 def dp(i, K): if i >= n or K > k: return K <= k return dp(i + 1, 0) % m + dp(i + 1, K + 1) % m return dp(0, 0) % m n = 4 k = 2 print(solve(n, k))
Đầu vào
4, 2
Đầu ra
5