剑指offer 60:n个骰子的点数

在这里插入图片描述

class Solution {
    
    
public:
    vector<double> dicesProbability(int n) {
    
    
        vector<double> res(5 * n + 1);
        vector<vector<int>> dp(n + 1, vector<int>(6 * n + 1, 0));
        int row = n + 1, col = 6 * n + 1;
        for (int i = 1; i <= 6; ++i) {
    
    
            dp[1][i] = 1;
        }
        for (int i = 2; i < row; ++i) {
    
    
            for (int j = i; j < col; ++j) {
    
    
                for (int k = 1; k <= 6; ++k) {
    
    
                    if (j - k > 0) {
    
    
                        dp[i][j] += dp[i - 1][j - k];
                    } else {
    
    
                        break;
                    }
                }
            }
        }
        double y = pow(6.0, n);
        for (int i = n; i <= 6*n; ++i) {
    
    
            res[i - n] = dp[n][i] / y;
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_44537258/article/details/114064241