美文网首页
60.n个骰子的点数(简单)**

60.n个骰子的点数(简单)**

作者: 今天柚稚了么 | 来源:发表于2020-02-24 20:56 被阅读0次

题目描述:

把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
输入: 1
输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]
输入: 2
输出:[0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08333,0.05556,0.02778]

思路:动态规划

f(n, s) 表示n个骰子点数和为s的排列情况总数
当n=1时, f(1,1)=f(1,2)=f(1,3)=f(1,4)=f(1,5)=f(1,6)=1
当n>=2时,f(n,s)=f(n-1,s-1)+f(n-1,s-2)+f(n-1,s-3)+f(n-1,s-4)+f(n-1,s-5)+f(n-1,s-6)

class Solution {
    public double[] twoSum(int n) {
        //dp[i][j]代表i枚色子和为j的概率
        double[][] dp = new double[n + 1][6 * n + 1];
        for (int i = 1; i <= 6; i++) {
            dp[1][i] = 1d / 6;
        }
        for (int i = 2; i <= n; i++) {//骰子
            for (int j = i; j <= i * 6; j++) {//点数
                for (int k = 1; k < j; k++) {//当前骰子的点数
                    dp[i][j] += dp[1][k] * dp[i - 1][j - k];
                }
            }
        }
        result = Arrays.copyOfRange(dp[n], n, 6 * n + 1);
        return result;
    }
}

相关文章

网友评论

      本文标题:60.n个骰子的点数(简单)**

      本文链接:https://www.haomeiwen.com/subject/uzjxqhtx.html