class Solution {//动态规划
public:
vector<double> twoSum(int n) {
int dp[12][70]={0};//dp[i][j] 表示投掷i个骰子之后j点数出现的次数
for(int i=1;i<7;i++){//初始化第一次
dp[1][i] = 1;
}
// 对于状态转移 dp[n][j] = dp[n-1][j-1]+dp[n-1][j-2]+....+dp[n-1][j-6]
for(int i=2;i<n+1;i++){
for(int j=i;j<6*i+1;j++){
int temp = j;
while(temp>=i && temp>j-6){
temp--;
dp[i][j]+= dp[i-1][temp];
}
}
}
double sum = pow(6,n);
vector<double> ans ;
for(int i = n;i<6*n+1;i++){
ans.push_back(dp[n][i]/sum);
}
return ans;
}
};
//动态规划3个步骤
//一,表示状态
//二,找出状态转移方程
//三,边界处理
动态规划求n个骰子掷出的点数概率集合问题
最新推荐文章于 2023-09-28 14:19:13 发布