1 题目描述
2 算法思路
动态规划:
- 状态定义:dp[]为n个骰子的点数概率数组,pre[] 为n-1个骰子的点数概率数组
- 初始化:pre[] = {1/6,1/6,1/6,1/6,1/6,1/6}
- 状态转移方程:
- dp[x+y] = pre[x] * num[y]; //从最小值,一直更新到最大值
3 代码
class Solution {
public double[] twoSum(int n) {
double[] pre = {1/6d,1/6d,1/6d,1/6d,1/6d,1/6d};
for(int i = 2; i <= n; i++){
double[] dp = new double[5 * i + 1]; //n个骰子有多少种数字和
for(int j = 0; j < pre.length; j++){
for(int k = 0; k < 6; k++){
dp[j + k] += pre[j] / 6;
}
}
pre = dp;
}
return pre;
}
}
4 提交结果