题目:
class Solution {
public:
vector<double> dicesProbability(int n) {
vector<double> dp(6, 1.0/6.0); //dp[j]表示和为j时的概率,这里j=6是因为这是第一个骰子,骰子增多j也会改变
for(int i=2;i<=n;i++){ //从第二个骰子开始计算dp[j]的概率
vector<double> tmp(5*i+1, 0); //5*i+1是点数之和的个数:6*i-(i-1)
for(int j=0;j<dp.size();j++){ //先拿i-1个骰子的点数之和数组的第j个值,它所影响的是i个骰子时的temp[j+k]的值
for(int k=0;k<6;k++){ //比如只有1个骰子时,dp[1]是代表当骰子点数之和为2时的概率,它会对当有2个骰子时的点数之和为3、4、5、6、7、8产生六种影响
tmp[j+k]+=dp[j]/6.0; //累加上dp数组值与1/6的乘积
}
}
dp = tmp;
}
return dp;
}
};
作者:Krahets
链接:https://leetcode.cn/problems/nge-tou-zi-de-dian-shu-lcof/solutions/637778/jian-zhi-offer-60-n-ge-tou-zi-de-dian-sh-z36d/
来源:力扣(LeetCode)