কম্পিউটার

আমরা পাইথনে n ডাইস নিক্ষেপ করতে পারি তার সংখ্যা গণনা করার প্রোগ্রাম


ধরুন আমাদের একটি সংখ্যা n, মুখের সংখ্যা এবং একটি মোট মান আছে, আমাদের মোট সংখ্যা পেতে প্রতিটি মুখের সাথে n ডাইস নিক্ষেপ করা সম্ভব। উত্তরটি খুব বড় মোড হলে ফলাফল 10**9 + 7।

সুতরাং, যদি ইনপুটটি n =2 মুখ =6 মোট =8 এর মত হয়, তাহলে আউটপুট হবে 5, কারণ 2 6-মুখী পাশা দিয়ে 8 তৈরি করার 5টি উপায় রয়েছে:(2 এবং 6), (6 এবং 2) , (3 এবং 5), (5 এবং 3), (4 এবং 4)।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • m :=10^9 + 7

  • dp :=আকারের একটি তালিকা (মোট + 1) তারপর 0

    দিয়ে পূরণ করুন
  • 1 থেকে ন্যূনতম মুখগুলির পরিসরের জন্য, প্রতিটি ধাপে মোট + 1 দ্বারা আপডেট করুন, করুন

    • dp[মুখ] :=1

  • আমি 0 থেকে n - 2 রেঞ্জের জন্য, কর

    • j-এর জন্য সর্বমোট পরিসর 0, 1 দ্বারা হ্রাস করুন, করুন

    • dp[j] :=সকল dp[j - f] এর সমষ্টি f এর জন্য 1 থেকে মুখ + 1 যখন j - f>=1

  • dp mod m

    এর শেষ উপাদান ফেরত দিন

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

class Solution:
   def solve(self, n, faces, total):
      m = 10 ** 9 + 7
      dp = [0] * (total + 1)

      for face in range(1, min(faces, total) + 1):
         dp[face] = 1
      for i in range(n - 1):
         for j in range(total, 0, -1):
            dp[j] = sum(dp[j - f] for f in range(1, faces + 1) if j - f >= 1)
      return dp[-1] % m
ob = Solution()
n = 2
faces = 6
total = 8
print(ob.solve(n, faces, total))

ইনপুট

2,6,8

আউটপুট

5

  1. পাইথনে কালো তালিকাভুক্ত পদক্ষেপগুলি এড়িয়ে বল সর্বনিম্ন স্তরে নেমে যাওয়ার উপায় গণনা করার প্রোগ্রাম

  2. পাইথনে s-এ স্বতন্ত্র সাবস্ট্রিংয়ের সংখ্যা গণনা করার জন্য প্রোগ্রাম

  3. পাইথনে ক্রমাগত সর্বাধিক k গেমে জেতার উপায় গণনা করার প্রোগ্রাম

  4. পাইথনে n নোড সহ BST সংখ্যা গণনা করার প্রোগ্রাম