কম্পিউটার টিউটোরিয়াল

পাইথনে সর্বোচ্চ kটি liên tiếp জিতার পথের সংখ্যা বের করার প্রোগ্রাম

দুটি সংখ্যা n এবং k দেওয়া আছে। n = খেলার মোট সংখ্যা। সর্বোচ্চ kটি liên tiếp জেতার পথের সংখ্যা বের করতে হবে। উত্তর বড় হলে ১০⁹+৭ মডুলো করুন।

সমস্যা উদাহরণ

ইনপুট: n = 3, k = 2
আউটপুট: 7

ব্যাখ্যা: সম্ভাব্য পথগুলো: LLL, WLL, LWL, LLW, WWL, LWW, WLW (WWW বাদ কারণ ৩টি liên tiếp জয়)।

সমাধানের পদ্ধতি (রিকারসিভ DP + মেমোয়াইজেশন)

  1. m = 10**9 + 7 (মডুলো)
  2. dp(i, K) ফাংশন: i-তম খেলা থেকে শুরু করে বাকি খেলাগুলো K লিংক জয়সহ সমাপ্ত করার পথ
    • যদি i >= n or K > k: K <= k হলে ১, অন্যথায় ০ রিটার্ন করুন
    • return (dp(i+1, 0) + dp(i+1, K+1)) % m (হারলে K=০, জিতলে K+1)
  3. dp(0, 0) % m রিটার্ন করুন

পাইথন কোড

def solve(n, k):
    m = 10**9 + 7
    from functools import lru_cache
    
    @lru_cache(None)
    def dp(i, K):
        if i >= n or K > k:
            return 1 if K <= k else 0
        return (dp(i + 1, 0) + dp(i + 1, K + 1)) % m
    
    return dp(0, 0) % m

n = 4
k = 2
print(solve(n, k))  # আউটপুট: 5

টেস্ট কেস

ইনপুট: 4, 2
আউটপুট: 5

নোট: মূল কোডে m = 1**9 + 7 (সদা ৮) লেখা ছিল, সঠিক হচ্ছে 10**9 + 7। রিকারসিভ DP-তে lru_cache যোগ করা হয়েছে পারফরম্যান্সের জন্য।

  1. পাইথনে n জন মানুষ দিয়ে লাইট ফ্লিপ করলে অন অবস্থায় থাকা লাইটের সংখ্যা বের করার প্রোগ্রাম

  2. পাইথনে স্ট্রিং-এর সকল ভিন্ন উপস্ট্রিংয়ের সংখ্যা বের করার প্রোগ্রাম

  3. পাইথন প্রোগ্রাম - n নোড দিয়ে BST-এর সংখ্যা বের করুন

  4. কনসিকিউটিভ ১ ছাড়া বাইনারি স্ট্রিংয়ের সংখ্যা গণনা করার পাইথন প্রোগ্রাম