Python中目标总数的骰子卷数
假设我们有d个骰子,每个骰子都有f个面,编号为1、2,...,f。我们必须找到模数为10^9+7的可能方式的数量(从fd种方式中选择),掷骰子,使正面朝上的数字总和等于目标。因此,如果输入像d=2,f=6,target=7,那么输出将是6。因此,如果我们将每个骰子投掷6个面,则有6种方法获得总和6,即1+6。2+5,3+3,4+3,5+2,6+1。
为了解决这个问题,我们将遵循以下步骤-
m:=1e9+7
制作dx(t+1)阶的表dp,并用0填充
对于i,范围为0至d–1
如果i=0,则当j在1到f的范围内时dp[i,j]:=1,否则为0
除此以外
如果j–l>0,则dp[i,j]:=dp[i,j]+dp[i–1,j-l]和dp[i,j]:=dp[i,j]mod米
对于1到f范围内的l
对于0到t范围内的j
返回dp[d–1,t]modm
示例(Python)
让我们看下面的实现以更好地理解-
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