剑指 Offer 60. n个骰子的点数(中等)

发布时间 2023-08-29 22:22:42作者: 孜孜不倦fly

题目:

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)