剑指 Offer 60. n个骰子的点数
dp(真的妙)
对于n个骰子来说,他们值的和最小值是所有骰子都是1,最大值是所有骰子都是6,所以他们和的范围是[n, 6n]
,所以总共有6n - n + ! = 5n + 1
种情况。
对于n个骰子的值x来说,设n-1个骰子值x的概率是f(n - 1, x)
,则f(n, x) = f(n - 1, x - 1) * 1 / 6 + f(n - 1, x - 2) * 1 / 6 ... f(n - 1, x - 6) * 1 / 6
,这个式子表示当第n个骰子取值为y时,概率就是前n个骰子取值为x - y
乘上当前骰子取y的概率,这样子就形成了递推公式。
但是x - y
会产生越界问题,由此转变思想,当n-1个骰子取值为x时,n个骰子的取值只能是x+1 ~ x+6
。由此不用考虑越界。
1 | class Solution { |