剑指 Offer 60. n个骰子的点数

剑指 Offer 60. n个骰子的点数

题目描述

把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。

你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。

class Solution:
    def dicesProbability(self, n: int) -> List[float]:
        L = [[0]* 6 * n for _ in range(n + 1)]
        for j in range(6):
            L[1][j] = 1
        for i in range(2, n + 1):
            for j in range(i - 1, 6 * i):
                for k in range(6):
                    L[i][j] += L[i - 1][j - k - 1]
        s = 6 ** n
        return [ i/s for i in L[n] if i > 0]

        

动态规划:
转移 f [ n ] [ s ] = ∑ i = 1 6 f [ n − 1 ] [ s − i ] f[n][s] = \sum_{i=1}^{6}f[n-1][s-i] f[n][s]=i=16f[n1][si]
每个 i 上限为6 * i, 下限为 i,总数为 6^n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值