- 穷举加上备忘录就能解决
- dp[i][j],i表示骰子的个数,j表示点数
- 首先关于base case的确定,我们知道如果只有一个骰子,我们的点数只可能是1-6,并且概率为1/6.0,如果点数是小于等于0,那么概率肯定是0
- dp[i][j]=d[i-1][j-6.....j-1]*1/6
class Solution { double [][] memo; public double[] dicesProbability(int n) { //n个骰子可能扔出结果的最大值和最小值 int min=n; int max=n*6; memo=new double[n+1][max+1]; double []res=new double[max-min+1]; for(int i=0;i<res.length;i++){ res[i]=helper(n,min+i); } return res; } public double helper(int n,int point){ if(point<=0){ return 0; } if(n==1){ if(point>6){ return 0; } return 1/6.0; } if(memo[n][point]!=0){ return memo[n][point]; } double prob=0; for(int i=1;i<=6;i++){ prob+=helper(n-1,point-i) * 1 / 6; } memo[n][point]=prob; return prob; } }