骰子总数确定,求次数的期望

投掷一枚骰子,求总数为100时,次数的期望。
采用动态规划,或者仿真,考虑条件概率,复杂度,要可以算出总数为100的情况。

试试这个


def expectedThrows(target):
    dp = [0] * (target + 1)
    for i in range(1, target + 1):
        for j in range(1, 7):
            if i - j >= 0:
                dp[i] += dp[i - j]
        dp[i] = dp[i] / 6 + 1
    return dp[target]

target = 100
result = expectedThrows(target)
print(result)

【以下回答由 GPT 生成】

这是一个可以使用动态规划来解决的问题。动态规划是一种通过分解问题为简单的子问题,并依次解决子问题的方法。

首先,我们需要定义状态。在这个问题中,状态可以被定义为:当前总数为i时,需要的最小次数。

然后,我们需要找到状态之间的转移关系。在这个问题中,我们可以从1到100逐个计算状态之间的转移关系。对于每一个总数i,我们可以考虑所有可能投掷的结果,即1到6。那么,当总数为i时,需要的最小次数可以通过从前面的状态转移过来得到。我们可以选择投掷结果为1到6的骰子,然后将总数减去投掷结果,即可得到前面的状态。从前面的状态转移过来的次数加1,就是当前状态需要的次数。我们可以选择投掷结果为1到6的骰子中,需要次数最小的那个状态进行转移。

最后,我们需要考虑初始状态。当总数为0时,需要的次数为0。当总数为1到6时,需要的次数为1,因为刚开始投掷一次。

下面是使用动态规划解决问题的Python代码:

def dice_throw(n):
    # 定义状态数组,初始值设为正无穷大
    dp = [float('inf')] * (n+1)
    # 初始状态
    dp[0] = 0
    for i in range(1, n+1):
        # 遍历投掷的结果
        for j in range(1, 7):
            if i >= j:
                # 当前状态转移过来的次数加1与当前状态的次数进行比较
                dp[i] = min(dp[i-j]+1, dp[i])

    return dp[n]

# 测试代码
print(dice_throw(100))

这个代码使用了两个嵌套的循环,时间复杂度为O(n),其中n为总数。这个代码可以计算出总数为100的情况下,需要的最小次数。

希望这个解决方案对您有帮助。如果你有任何其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^