该程序计算我们可以在Python中抛出n个骰子的方式数量

假设我们有n个,面数和一个总值,我们必须找到有可能将n个骰子与面一起掷出的总数的方法。如果答案是非常大的mod,则结果为10 ** 9 + 7。

因此,如果输入像n = 2个面= 6个总数= 8,那么输出将为5,因为有5种方法可以使8具有2个6面骰子:(2和6),(6和2) ,(3和5),(5和3),(4和4)。

为了解决这个问题,我们将遵循以下步骤-

  • m:= 10 ^ 9 + 7

  • dp:=大小列表(总计+ 1),然后填充0

  • 对于范围从1到最少的脸部,在每个步骤中以总数+ 1更新,执行

    • dp [face]:= 1

  • 对于介于0到n-2之间的i

    • 对于范围总计为j的j,减1,

    • dp [j]:=当j-f> = 1时,范围1中的f到+1的所有dp [j-f]之和

  • 返回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
猜你喜欢