Leetcode: 1155. Number of Dice Rolls With Target Sum
from functools import cache
class Solution:
def numRollsToTarget(self, n: int, k: int, target: int) -> int:
MOD = 10**9 + 7
@cache
def dfs(i, t):
if i == n:
return 1 if t == 0 else 0
ans = 0
for v in range(1, min(k, t) + 1):
ans = (ans + dfs(i + 1, t - v)) % MOD
return ans
return dfs(0, target)
assert Solution().numRollsToTarget(1, 6, 3) == 1
assert Solution().numRollsToTarget(2, 6, 7) == 6
assert Solution().numRollsToTarget(30, 30, 500) == 222616187
class Solution:
def numRollsToTarget(self, n: int, k: int, target: int) -> int:
MOD = 10**9 + 7
dp = [[0] * (target + 1) for _ in range(n + 1)]
dp[n][0] = 1
for i in range(n - 1, -1, -1):
for t in range(target + 1):
ans = 0
for f in range(1, min(k, t) + 1):
ans = (ans + dp[i + 1][t - f]) % MOD
dp[i][t] = ans
return dp[0][target]
assert Solution().numRollsToTarget(1, 6, 3) == 1
assert Solution().numRollsToTarget(2, 6, 7) == 6
assert Solution().numRollsToTarget(30, 30, 500) == 222616187