剑指 Offer 60. n个骰子的点数

package leetcode;

public class offer_60 {
    public double[] dicesProbability(int n) {
        double[] ans=new double[5*n+1];
        //dp表示n个骰子得出和为s的个数
        int[][] dp=new int[n][6*n];
        for (int i = 0; i < 6; i++) {
            dp[0][i]=1;
        }
        //f(n,s)=f(n-1,s-1)+f(n-1,s-2)+...
        for (int i = 1; i < n; i++) {
            for (int j = i; j < (i+1)*6; j++) {
                for(int k=1;k<=6;k++) {
                    if(j>=k) {
                        dp[i][j]=dp[i][j]+dp[i-1][j-k];
                    }
                    else {
                        break;
                    }
                }
            }
        }
        for (int i = 0; i < ans.length; i++) {
            ans[i]=dp[n-1][n-1+i]/Math.pow(6, n);
            System.out.println(ans[i]);
        }
        
        return ans;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        offer_60 off=new offer_60();
        off.dicesProbability(3);
    }

}

 

posted on 2022-04-01 16:10  一仟零一夜丶  阅读(18)  评论(0)    收藏  举报