मान लीजिए कि हमारे पास दो संख्याएँ n और k हैं। यहाँ n हमारे द्वारा खेले जाने वाले खेलों की संख्या को दर्शाता है। हमें यह पता लगाना है कि हम कितने तरीकों से k या उससे कम गेम लगातार जीत सकते हैं। अगर उत्तर बहुत बड़ा है तो परिणाम को 10^9 + 7 से संशोधित करें।
इसलिए, यदि इनपुट n =3 k =2 जैसा है, तो आउटपुट 7 होगा, क्योंकि संभावित तरीकों से हम लगातार 2 या उससे कम बार जीत सकते हैं, ["LLL", "WLL", "LWL", "LLW", "WWL", "LWW", "WLW"]
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- म :=1^9 + 7
- एक फ़ंक्शन को परिभाषित करें dp() । यह मैं, कश्मीर ले जाएगा
- यदि मैं>=n या K> k, तो
- सही लौटें जब K <=k, अन्यथा असत्य
- रिटर्न dp(i + 1, 0) mod m + dp(i + 1, K + 1) mod m
- मुख्य विधि से, निम्न कार्य करें -
- रिटर्न डीपी(0, 0) मॉड एम
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
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))
इनपुट
4, 2
आउटपुट
5