剑指 Offer 60. n个骰子的点数
剑指 Offer 60. n个骰子的点数
概率dp。
我们用表示使用i个骰子投出总和j的概率,容易得到n个骰子最大的和为,即全为6的情况,范围在[n, 6n]之间,共计有种情况。
如果暴力求解,那么范围就会在之间,肯定会造成超时。
但是需要注意的是会有越界问题,如求时,就只需要求即可,因为都没有意义。
class Solution {
public double[] dicesProbability(int n) {
double[] res = new double[5 * n + 1];
// n个骰子投出s的概率
int[][] dp = new int[n + 1][n * 6 + 1];
double all = Math.pow(6, n);
for(int i = 1; i <= 6; i++) {
dp[1][i] = 1;
}
// 枚举n个骰子
for(int i = 1; i <= n; i++) {
// 枚举这么n个骰子时所有可能的和
for(int j = i; j <= 6 * i; j++) {
// 每一步都可以从上一步的j - k得到
for(int k = 1; k <= 6; k++) {
dp[i][j] += j > k ? dp[i - 1][j - k] : 0;
if(i == n) {
res[j - i] = dp[i][j] / all;
}
}
}
}
return res;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)