【每日算法Day 98】慈善赌神godweiyang教你算骰子点数概率!

简介: 【每日算法Day 98】慈善赌神godweiyang教你算骰子点数概率!

题目链接

LeetCode 面试题60. n个骰子的点数[1]

题目描述

n 个骰子扔在地上,所有骰子朝上一面的点数之和为 s。输入 n,打印出 s 的所有可能的值出现的概率。

你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。

说明:

  • 1 <= n <= 11

示例1

输入:
1
输出:
[0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]

示例2

输入:
2
输出:
[0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08333,0.05556,0.02778]

题解

令  表示投掷  个骰子,点数为  的方法数。那么可以根据最后一个骰子的点数情况( 到 ),递归进行计算:

当然还得加一些约束,例如  个骰子的点数范围是  ,所以一定有  ,即 。所以综上  的范围是 ,最后的转移方程就是:

但是,考虑到在计算  个骰子时,如果  ,那么  ,也就是  是根本不会被计算的。所以初始化的时候如果都是  ,那么就不用管这个下界了,也就是转移方程为:

此外,因为每次计算只会用到  个骰子的方法数,所以第一个维度可以省去。但是注意计算的时候  就得逆序遍历了,这样才不会覆盖掉  个骰子的方案数,造成后面的计算错误。

最后答案就是  。

代码

动态规划+空间优化(c++)

class Solution {
public:
    vector<double> twoSum(int n) {
        vector<int> dp(6*n+1, 0);
        for (int i = 1; i <= 6; ++i) dp[i] = 1;
        for (int i = 2; i <= n; ++i) {
            for (int s = 6*i; s >= i; --s) {
                dp[s] = 0;
                for (int j = 1; j <= min(6, s-i+1); ++j) {
                    dp[s] += dp[s-j];
                }
            }
        }
        double total = pow(6, n);
        vector<double> res;
        for (int s = n; s <= 6*n; ++s) {
            res.push_back(dp[s]/total);
        }
        return res;
    }
};
相关文章
|
8月前
|
机器学习/深度学习 算法 机器人
PETS:伯克利大神Sergey Levine指导的概率集成轨迹采样算法
PETS:伯克利大神Sergey Levine指导的概率集成轨迹采样算法
|
11月前
|
资源调度 算法 关系型数据库
概率图推断之变量消除算法
事实证明,推理是一项颇具挑战的任务。对于很多我们感兴趣的概率,要准确回答这些问题都是NP难题。至关重要的是,推理是否容易处理取决于描述概率的图的结构。尽管有些问题很难解决,我们仍然可以通过近似推理方法获得有用的答案。
179 0
概率图推断之变量消除算法
|
机器学习/深度学习 传感器 算法
基于matlab模拟四类CFAR检测算法的检测概率与SNR的关系
基于matlab模拟四类CFAR检测算法的检测概率与SNR的关系
|
机器学习/深度学习 传感器 算法
【蝴蝶算法】基于随机惯性权重策略+最优邻域扰动策略+动态转换概率策略的蝴蝶算法求解单目标优化问题附matlab代码IBOA
【蝴蝶算法】基于随机惯性权重策略+最优邻域扰动策略+动态转换概率策略的蝴蝶算法求解单目标优化问题附matlab代码IBOA
|
机器学习/深度学习 传感器 算法
【鲸鱼算法】基于融合动态概率阈值和自适应变异的鲸鱼优化算法PTMWOA求解单目标优化问题附matlab代码
【鲸鱼算法】基于融合动态概率阈值和自适应变异的鲸鱼优化算法PTMWOA求解单目标优化问题附matlab代码
|
算法 安全 调度
Interview:算法岗位面试—BAT公司问题面试之计算机基础(进程与线程的区别)、经典概率问题等集锦
Interview:算法岗位面试—BAT公司问题面试之计算机基础(进程与线程的区别)、经典概率问题等集锦
Interview:算法岗位面试—BAT公司问题面试之计算机基础(进程与线程的区别)、经典概率问题等集锦