假设我们正在玩一个独特的游戏,并且我们有三个值n,k和h。我们从0点开始,然后我们可以从1到h(包括1和h)之间随机选择一个数字,然后得到那么多点。当我们获得至少k分时,我们将停止。我们必须找到n点或更少点的概率。在这里,可以随机选择任何数量,并且结果都有相同的概率。
因此,如果输入类似于n = 2,k = 2,h = 10,则输出将为0.11。
为了解决这个问题,我们将遵循以下步骤-
定义一个功能dp()。这将走道路。
返回1
返回0
返回(n − k + 1和h的最小值)/ h
如果路径与k − 1相同,则
如果path> n,则
如果路径> = k,则
返回dp(path +1)-(dp(path + h +1)-dp(path +1))/ h
在主要功能中,执行以下操作-
如果k为零,则
返回1
如果n <k
返回0
返回dp
让我们看下面的实现以更好地理解-
class Solution: def solve(self, n, k, h): if not k: return 1 if n < k: return 0 def dp(path): if path == k− 1: return min((n− k + 1), h) / h if path > n: return 0 if path >= k: return 1 return dp(path + 1)− (dp(path + h + 1)− dp(path + 1)) / h return dp(0) ob = Solution() print(ob.solve(2,2,10))
2,2,10输出结果
0.11