package
0.0.0-20230809123828-b071cee2968a
Repository: https://github.com/codehanhan/leetcode-go.git
Documentation: pkg.go.dev
# README
n个骰子的点数
1. 题目描述
把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。
2. 示例
输入: 1
输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]
输入: 2
输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08333,0.05556,0.02778]
3. 解题
要想求出每个点数(和)出现的概率,则分母为点数和的可能点数为:[n, 6n],分子为该点数和出现的次数 难点在于如何求某一点数出现的次数。
求某一点数和的出现次数
各个点数和只能由[1, 2, 3, 4, 5, 6]这6个数字组合相加而来,可用动态规划法
设dp[n][j]
为n个骰子,点数和为j,则有:
$$ dp[n][j] = \sum_{i=1}^{6}dp[n-1][j-i] $$
对此的解释为:投掷n枚骰子得到j点的状态可由投掷n-1枚骰子得到[j-1, j-2, j-3, j-4, j-5, j-6]这几个状态转移而来。