该程序计算我们可以在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]之和
返回dpmodm的最后一个元素
让我们看下面的实现以更好地理解-
示例
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