मान लीजिए हमारे पास एक संख्या n, फेस की संख्या, और एक कुल मान है, हमें उन तरीकों की संख्या ढूंढनी है जिनसे n डाइस को फेंककर कुल मान प्राप्त किया जा सकता है। यदि उत्तर बहुत बड़ा है तो परिणाम को 10^9 + 7 से मॉड करें।
उदाहरण के लिए, यदि इनपुट n = 2, faces = 6, total = 8 है, तो आउटपुट 5 होगा, क्योंकि 2 छह-फेस वाले डाइस से 8 बनाने के 5 तरीके हैं: (2 और 6), (6 और 2), (3 और 5), (5 और 3), (4 और 4)।
इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:
- m := 10^9 + 7
- dp := आकार (total + 1) की सूची, 0 से भरी हुई
- face को 1 से min(faces, total) तक के लिए करें:
- dp[face] := 1
- i को 0 से n-2 तक के लिए करें:
- j को total से 0 तक घटाते हुए करें:
- dp[j] := सभी dp[j - f] का योग जहां f 1 से faces+1 तक और j - f >= 1
- j को total से 0 तक घटाते हुए करें:
- dp के अंतिम तत्व को 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