面试题60:n个骰子的点数
文章目录
题目
把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。
考点
动态规划
n个骰子可以投出数的个数为5n+1(6n-n+1)
LeetCode版本
class Solution {
public:
vector<double> dicesProbability(int n) {
vector<double> dp(6,1.0/6.0);
for(int i =2; i<= n; i++){
vector<double> temp(5*i+1,0);//概率初始化为0
for(int j = 0; j < dp.size(); j++){
for(int k = 0;k<6;k++){
temp[j+k] += dp[j]/6.0;// /6.0是第i个骰子甩到k+1的概率
}
}
dp = temp;
}
return dp;
}
};