该程序计算我们可以在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