zoukankan      html  css  js  c++  java
  • 剑指 Offer 60. n个骰子的点数

    把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
    你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。
    class Solution {
        public double[] dicesProbability(int n) {
            int [][]dp=new int[n+1][6*n+1];
            for(int i=1;i<=6;i++){
                dp[1][i]=1;
            }
            for(int i=2;i<=n;i++){
                for(int s=i;s<=6*n;s++){
                    for(int j=1;j<=6;j++){
                        if(s-j<i-1){//s-j是减去当前点的点数,剩余的有i-1个点,最小是i-1
                            break;
                        }
                        //前i个骰子总数为s的次数等于前i-1个骰子等于s-j的次数加上第i个骰子等于j的次数
                        dp[i][s]+=dp[i-1][s-j];//一个累加过程 dp[3][5]=dp[3][5]+dp[2][4]+dp[2][3]+dp[2][2]
                        
                    }
                }
            }
            //前面计算了n个点得到总数为n-6n的次数,下面计算概率,掷骰子总数是6^n个结果
            double total=Math.pow(6,n);
            double []ans=new double[5*n+1];
            for(int i=n;i<=6*n;i++){
                ans[i-n]=(double)dp[n][i]/total;
            }
            return ans;
        }
    }
  • 相关阅读:
    poj 1200 crasy search
    cdoj 1092 韩爷的梦
    fzu 2257 saya的小熊饼干
    zoj 3950 how many nines
    zoj 3963 heap partion
    fzu 2256 迷宫
    fzu 2253 salty fish
    hdu 2473 Junk-Mail Filter
    codeforces 129B students and shoes
    hdu 3367 Pseudoforest
  • 原文地址:https://www.cnblogs.com/jieyi/p/14297642.html
Copyright © 2011-2022 走看看