मान लीजिए कि हमारे पास d पासे हैं, और प्रत्येक पासे में f फलकों की संख्या 1, 2, ..., f है। हमें पासे को रोल करने के लिए संभावित तरीकों (एफडी कुल तरीकों में से) मॉड्यूलो 10^9 + 7 की संख्या का पता लगाना होगा ताकि लक्ष्य के बराबर फेस अप संख्याओं का योग हो। अतः यदि इनपुट d =2, f =6, लक्ष्य =7 जैसा है, तो आउटपुट 6 होगा। इसलिए यदि हम प्रत्येक पासे को 6 फलकों के साथ फेंकते हैं, तो योग 6 प्राप्त करने के 6 तरीके हैं, जैसे 1 + 6, 2 + 5, 3 + 3, 4 + 3, 5 + 2, 6 + 1.
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- म :=1e9 + 7
- क्रम d x (t + 1) की तालिका dp बनाएं और इसे 0 से भरें
- i के लिए 0 से d – 1 की सीमा में
- जे के लिए 0 से टी की सीमा में
- यदि i =0, तो dp[i, j] :=1 जब j श्रेणी 1 से f तक, अन्यथा 0
- अन्यथा
- 1 से f की श्रेणी में l के लिए
- अगर j – l> 0, तो dp[i, j] :=dp[i, j] + dp[i – 1, j - l], और dp[i,j] :=dp[i, जे] मॉड एम
- 1 से f की श्रेणी में l के लिए
- जे के लिए 0 से टी की सीमा में
- रिटर्न डीपी[डी -1, टी] मॉड एम
उदाहरण (पायथन)
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
class Solution(object): def numRollsToTarget(self, d, f, t): mod = 1000000000+7 dp =[[0 for i in range(t+1)] for j in range(d)] for i in range(d): for j in range(t+1): if i == 0: dp[i][j] = 1 if j>=1 and j<=f else 0 else: for l in range(1,f+1): if j-l>0: dp[i][j]+=dp[i-1][j-l] dp[i][j]%=mod return dp [d-1][t] % mod ob = Solution() print(ob.numRollsToTarget(2,6,7))
इनपुट
2 6 7
आउटपुट
6