题目链接: 剑指 Offer 60. n个骰子的点数
题目描述:
把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
解法思路:
还未理解
代码:
// 通常做法是声明一个二维数组 dp ,dp[i][j] 代表前 i 个骰子的点数和 j 的概率,
// 并执行状态转移。而由于 dp[i] 仅由 dp[i−1] 递推得出,
// 为降低空间复杂度,只建立两个一维数组 dp , tmp 交替前进即可。
func dicesProbability(n int) []float64 {
//初始化一个二维切片
db := make([][]float64, n)
//规定二维切片每一行的长度
for i := range db {
db[i] = make([]float64, 5*i+6)
}
//初始化,为二维切片第一行赋值
for i := 0; i < 6; i++ {
db[0][i] = 1.0 / 6.0
}
//开始递归,找出最终结果
for i := 0; i < len(db)-1; i++ {
for j := range db[i] {
for k := 0; k < 6; k++ {
db[i+1][j+k] += db[i][j] / 6.0
}
}
}
return db[n-1]
}
标签:骰子,Offer,db,60,点数,dp
From: https://www.cnblogs.com/lxing-go/p/17694271.html