当前位置:网站首页>Deceptive Dice(期望计算)
Deceptive Dice(期望计算)
2022-08-09 20:50:00 【Here_SDUT】
题意
给你一个n个面的骰子,你最多可以投k次,你可以在任意一次停止投掷骰子,并将最后一次的结果作为你的得分,骰子每一面出现的概率均等,让你求最多投k次得分的期望为多少。
分析
我们以20面的骰子最多投3次为例:
只投掷一次: 每一面出现的概率都是\frac{1}{20},再乘上每种情况的得分,可得:\frac{1}{20} * \sum^{20}_{i= 1}{i} = 10.5
最多投两次: 投一次的期望是10.5分,所以只有第一次得分低于10.5才进行第二次投掷,故分为投一次和投两次的情况,投一次的期望为:\frac{1}{20} * \sum_{i=11}^{20}i,投两次的期望可以看成在第一次投掷结果为1-10的前提下,再投一次,即第一次投掷结果为1-10的概率乘上只投掷一次的期望。综上,公式为:\frac{1}{20} * \sum_{i=11}^{20}i+\frac{10}{20} * 10.5 = 13
最多投三次: 投两次的期望为13,那么第一次如果投掷的结果为1-13,那么投掷两次肯定更优,故可以分为两种情况考虑:第一次投掷结果为14-20,那么只要投一次,期望为:\frac{1}{20} * \sum_{i=14}^{20}i;第一次结果为1-13,那么还需要继续投掷,可以看成在第一次投掷结果为1-13的基础上最多投掷两次的期望,即:\frac{13}{20} * 13
可以发现,每次的结果都是由上一步推得,可以得出一个递推关系,那么求n面骰子,投k次只要从1次一直推到k次即可,由于要用到区间和,用前缀和预处理一下即可,代码实现简单。
代码
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn = 1e5+10;
const int inf = 0x3f3f3f3f;
const double PI = acos(-1.0);
typedef pair<int,int> PII;
typedef pair<LL,LL> PLL;
double s[110];
LL n, k;
int main() {
scanf("%lld %lld", &n, &k);
for (LL i = 1; i <= n; i++) {
s[i] = s[i - 1] + i;
}
double t = s[n] / n;
for (LL i = 2; i <= k; i++) {
LL pos = (LL)t;
t = (s[n] - s[pos]) / n + (pos)*t / n;
}
printf("%.8lf\n", t);
return 0;
}边栏推荐
猜你喜欢
随机推荐
痛击面试官 CURD系统也能做出技术含量
STM32WB55的FUS更新及协议栈固件烧写方法
一种基于连接和安全熵的网络空间整体安全认识和方法
阿里二面:没有 accept,能建立 TCP 连接吗?
matlab 神经网络 ANN 分类
leetcode 二叉树的公共近祖先
Excel如何打出正负号?Excel打出正负号的方法
【泛型编程】模板全详解
Word怎么制作一张标准的答题卡?
Simulation of Water Temperature Control System Based on Fuzzy PID Controller
DSPE-PEG-PDP, DSPE-PEG-OPSS, phospholipid-polyethylene glycol-mercaptopyridine reduce the immunogenicity of peptides
QGIS编译SIP的问题
URL Protocol web page to open the application
场效应管Mosfet之雷卯Leiditech对应英飞凌Infineon
PyTorch框架的 torch.cat()函数
Byte side: Can TCP and UDP use the same port?
蓝牙模块的分类和对应的属性特点
leetcode二叉搜索树与双向链表
韩国网络安全体系特征与发展前景
linux定时执行sql文件[通俗易懂]








