思路
先算出每种点数有多少种投法。求完了每一个点数之后再除以总点数即可。
f[i][j]表示投完第i个骰子之后点数为j的投法有几种。我们要从f[0][0]算到f[n][6n]。然后需要的点数是f[n][n]~f[n][6n]这5*n种点数。
三重循环计算即可
class Solution {
public:
double a[15][70];
vector<double> dicesProbability(int n) {
vector<double>ans;
a[0][0]=1;
for(int i=1;i<=n;i++)
{
for(int j=i;j<=i*6;j++)
{
for(int k=1;k<=6;k++)
{
if(j-k>=0)a[i][j]+=a[i-1][j-k];
}
}
}
double cnt=0;
for(int i=n;i<=6*n;i++)cnt+=a[n][i];
for(int i=n;i<=6*n;i++)
{
a[n][i]/=cnt;
ans.push_back(a[n][i]);
}
return ans;
}
};