【每日算法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;}
};
参考资料
[1]
LeetCode 面试题60. n个骰子的点数: https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof/
【每日算法Day 98】慈善赌神godweiyang教你算骰子点数概率!相关推荐
- AI赌神超进化:德扑六人局击溃世界冠军,诈唬如神,每小时能赢1千刀 | Science...
鱼羊 栗子 乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAI AI赌神完成了超进化! 两年前的Libratus,历时20天战胜4位顶级德州扑克选手,但只能1v1.现在全新的赌神Plurib ...
- 如何判断数组所有数都不等于一个数_【每日算法Day 91】求解数组中出现次数超过1/3的那个数
题目链接 LeetCode 229. 求众数 II[1] 题目描述 给定一个大小为 的数组,找出其中所有出现超过 次的元素. 说明: 要求算法的时间复杂度为 ,空间复杂度为 . 示例1 输入: [3, ...
- 消除左递归c++代码_【每日算法Day 85】图解算法:一行代码解决约瑟夫环的变体...
题目链接 LeetCode 390. 消除游戏[1] 题目描述 给定一个从 到 排序的整数列表. 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾. 第二步,在剩下的数字中,从右 ...
- 重复次数最多的 子串_每日算法系列【LeetCode 424】替换后的最长重复字符
题目描述 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次.在执行上述操作后,找到包含重复字母的最长子串的长度. 示例1 输入: s = &quo ...
- CMU德扑AI赌神,现已拿下美军千万美元大单
乾明 发自 凹非寺 量子位 出品 | 公众号 QbitAI 还记得那个玩德扑的AI吗? 没错,就是Libratus,中文名冷扑大师,在2017年举办的德扑人机大战中,一举成名. 在2017年的比赛中, ...
- python 获取节假日,二十四节气,中国农历,星次、每日凶煞、每日值神、农历建除十二神、农历每日宜忌、彭祖百忌、每日五行、二十八星宿、天干地支、农历生辰八字、时辰凶吉等
Python 农历项目cnlunar的使用 文章目录 Python 农历项目cnlunar的使用 前言 一.cnlunar是什么? 二.使用步骤 1.安装pip 2.使用 总结 前言 1.不使用寿星通 ...
- AI赌神称霸德扑的秘密,刚刚被《科学》“曝光”了
本文来自AI新媒体量子位(QbitAI) 称霸德州扑克赛场的赌神Libratus,是今年最瞩目的AI明星之一. 刚刚,<科学>最新发布的预印版论文,详细解读了AI赌神背后系统的全貌.此前的 ...
- 【每日算法】C语言8大经典排序算法(2)
接上文--->[每日算法]C语言8大经典排序算法(1) 二.插入类排序 插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中 ...
- java回文数算法for_【Java】【每日算法/刷穿 LeetCode】9. 回文数(简单)
首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]9. 回文数(简单) 宫水三叶发布于 今天 15:30 题目描述 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从 ...
- 每日算法C语言1-求某整数
每日算法C语言 题目 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 程序分析: 在10万以内判断,先将该数加上100后再开方,再将该数加上168后再开方如 ...
最新文章
- 硬件常见问题及排错思路。
- linux存储--从内核文件系统看文件读写过程(四)
- 汉字转拼音(c#) -转载
- Android资源文件在配置文件中的使用
- Test435678
- Python3判断是否为回文数
- java robot键值_Java:使用Robot类模拟键盘, 以Alt码方式输出汉字
- 她拒绝麦肯锡 Offer,建立图片训练数据库,斯坦福 AI 实验室负责人 | 人物志
- 阿里云 centos 安装图形化界面
- 从源码看spring applicationContext在web容器中加载过程
- 停课不停学,大型网课直播翻车现场,你别笑,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈啊哈...
- 小结Python的中文处理(转)
- React 路由 中 BrowserHistory 刷新报404
- chown无效的用户mysql_求大神指引,安装MYSQL时执行chown指令出错,已经创建组和用户。local中并没有找到mysql。用find找过路径...
- CF1047A Little C Loves 3 I
- 颜色列表(中英文名称,RGB HSV CMYK值)
- google“退出”中国?
- NetApp 存储阵列 AFF A 系列——可提供屡获殊荣的速度和响应能力,满足性能敏感性工作负载的需求
- 数字资产期权新手入门手册 | TokenInsight
- 候选键的计算(数据库系统概论)