掷多个骰子取最大值为结果,求结果的期望值
1、题目表述
总共有n个骰子,第n个骰子的的范围为1 ~ Xn,Xn表示第n个骰子的最大值,掷骰子时取所有骰子中的最大值作为本次的结果,求掷一次骰子的得到的结果的期望值。
示例:
输入: 2 2 2
输出:1.75
解释:输入的第一个2表示两个骰子,后面两个2表示两个骰子的范围都为1 ~ 2。
2、解题思路
使用动态规划来解:使用一个二维数组 dp 来保存概率值,dp [ i ] [ j ] 表示总共有 i 个骰子时,掷出的结果为 j 的概率值。计算这个二维数组的概率值时,先从第一个骰子开始计算,接着根据第一个骰子的概率值递推地计算总共有2个骰子的概率值,然后递推地计算总共3个,...... , 总共 n 个骰子的概率值。代码实现如下:
#include <iostream>
#include <vector>
#include <algorithm>
#include <stdio.h>using namespace std;int main()
{int n = 2; // n表示骰子个数int x[55] = {0, 2, 2}; // x保存每个骰子的最大点数double dp[55][55]; // dp[i][j]表示第总共i个骰子,掷出的结果为j的概率// 初始化动态规划数组for (int i = 0; i <= 50; i++){for (int j = 0; j <= 50; j++){dp[i][j] = 0;}}dp[0][0] = 1; for (int i = 1; i <= n; i++){ for (int j = 1; j <= x[i]; j++){double tmp = 0; for (int k = 0; k <= j; k++){tmp += dp[i-1][k];} dp[i][j] += tmp/x[i];for (int k = j + 1; k <= 50; k++){dp[i][k] += dp[i-1][k]/x[i];}}for (int j = x[i] + 1; j <= 50; j++){dp[i][j] = dp[i-1][j];}}// 计算期望值double ans = 0 ;for (int i = 0; i <= 50; i++){ ans += dp[n][i] * i;}printf("%.2lf\n", ans);return 0;
}
掷多个骰子取最大值为结果,求结果的期望值相关推荐
- MySQL组内排序取最大值
最近业务反馈一个查询异常的问题,需要DBA对查询结果异常给出解释,并帮助他们解决该问题.问题本质是一个组内排序取最大值的问题,根据业务需求,我构建了测试用例 测试用例 --建表 create tabl ...
- PyTorch max()函数取最大值
max() 函数 本人在复现 LeNet5 网络进行 MNIST 数据集的训练,在模型预测阶段,需要用到 max() 函数进行结果的处理.将模型输出的 fc7 层的 10 个结果,变为最后的一个最大概 ...
- SQL取最大值编码(自动编码)
SQL取最大值编码(自动编码) 用途 : 使用SQL语法做出自动编码效果,例如将单号自动+1后,产生该笔单号 Table说明 SQL语法 SELECT 'A'+REPLICATE('0',7-len( ...
- mysql 组内排序_mysql组内排序取最大值
最近业务反馈一个查询异常的问题,需要DBA对查询结果异常给出解释,并帮助他们解决该问题.问题本质是一个组内排序取最大值的问题,根据业务需求,我构建了测试用例 测试用例--建表 create table ...
- mysql 分组统计 取最大值_(Mysql)sql分组取最大值问题
相信有很多开发人员都会碰到分组取最大值的问题,以及分组取前几个值或后几个值问题.今天开发中遇到了类似问题,百度学习了一波,自己写了个简单明了的小demo,有兴趣的同学可以参考一下,如有不对的地方请多多 ...
- java 6面骰子_掷6面骰子6000次每个点数出现的概率
掷6面骰子6000次每个点数出现的概率 import java.util.random; public class statistics { final static int maxsize = 60 ...
- java 6面骰子_java计算掷6面骰子6000次每个点数出现的概率代码实例
掷6面骰子6000次每个点数出现的概率 掷6面骰子6000次每个点数出现的概率 import java.util.Random; public class Statistics { final sta ...
- 使用stream流进行集合排序取最大值,根据集合中的bigdemal属性排序(正序反序)并取最大值
业务: 求折线图的UPH图相关数据,前端动态修改纵轴的峰值,需要后端获取最大值 1)根据集合某个属性(业务以bigdecimal数据为例)进行集合排序,包括升序反序 2)根据集合的某个number数值 ...
- 【Excel函数】隔行取数并取最大值
Excel数据处理 1 隔行取数 1.1 隔行取数后取最大值 1 隔行取数 问题:Excel中每隔10个数取一个值. 方法:OFFSET或INDEX函数. OFFSET(reference;rows; ...
最新文章
- 【数组方法大合集】原生js数组array常用工具方法大合集
- D - Fliptile POJ - 3279(翻转问题)
- python线性加权模型_局部加权之线性回归(1) - Python实现
- python个人总结_python个人总结
- mysql ---- 多表查询
- SQL Server 2012新增的内置函数尝试
- 【Day5.3】鸣沙山月牙泉看日落
- 为什么客户端最后还要等待2MSL?
- 伦敦银现的交易时间特点
- ui九宫格切图_【九宫切图】什么是九宫绘图,九宫格绘法
- 我的世界天空之城服务器位置,我的世界天空之城建筑地图详解(附存档)
- java处理Oracle Clob Blob类型数据
- 译《The Part-Time Parliament》——终于读懂了Paxos协议!
- 【阿里面试】链表排序总结
- 【Tools】WinEdt编译错误 Error Launching Console Application XeLaTeX ...系统找不到指定的文件。
- html5 复制到剪贴板 兼容,JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
- VirtualService
- 10款自媒体人必备的免费工具,快速高效运营
- TextPerceptron阅读笔记
- 2、并行接口、协议和相关芯片介绍(8080、8060)