剑指offer60
# 剑指offer60
把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。
第一次用的dfs,res[i]存放的是点数之和为i时有几种可能。但是用时比较长。
public void dfs(double[]res,int n,int sum,int iter) { if(iter==0) { res[sum-n]++; return; } for(int i=1;i<=6;i++) dfs(res,n,sum+i,iter-1); }1
2
3
4
5
6
7
8
9
10
11动态规划。考虑n个骰子和n-1个骰子每个总数可能之间的关系。dp[i][j]表示i个骰子总数为j时的可能情况,则可以得到状态转移方程dp[i][j]=dp[i-1][j-1]+dp[i-1][j-2]+...+dp[i-1][j-6],表示前n-1个骰子掷出和为j-k时,这时候第n个骰子只需要掷出k即可。(1<=k<=6)
Math.pow(a,b):指数算式,表示a^b
编辑 (opens new window)
上次更新: 2023/12/15, 15:49:57