期望的运用

期望,简单来说就是做一个事情可能得到结果的平均值。

在17世纪,有一个赌徒向法国著名数学家帕斯卡挑战,给他出了一道题目:甲乙两个人赌博,他们两人获胜的机率相等,比赛规则是先胜三局者为赢家,一共进行 5 5 5 局,赢家可以获得 100 100 100 法郎的奖励。当比赛进行到第 4 4 4 局的时候,甲胜了 2 2 2 局,乙胜了 1 1 1 局,这时由于某些原因中止了比赛,那么如何分配这 100 100 100 法郎才比较公平?

用概率论的知识,不难得知,甲获胜的可能性大,乙获胜的可能性小。

因为甲输掉后两局的可能性只有 1 2 × 1 2 = 1 4 \frac{1}{2}\times\frac{1}{2}=\frac{1}{4} 21×21=41,也就是说甲赢得后两局或后两局中任意赢一局的概率为 1 − 1 4 = 3 4 1-\frac{1}{4}=\frac{3}{4} 141=43,甲有 75 % 75\% 75% 的期望获得 100 100 100 法郎;而乙期望赢得 100 100 100 法郎就得在后两局均击败甲,乙连续赢得后两局的概率为 1 2 × 1 2 = 1 4 \frac{1}{2}\times\frac{1}{2}=\frac{1}{4} 21×21=41,即乙有 25 % 25\% 25% 的期望获得 100 100 100 法郎奖金。

可见,虽然不能再进行比赛,但依据上述可能性推断,甲乙双方最终胜利的客观期望分别为 75 % 75\% 75% 25 % 25\% 25%,因此甲应分得奖金的 100 × 75 % = 75 100\times75\%=75 100×75%=75 法郎,乙应分得奖金的的 100 × 25 % = 25 100\times25\%=25 100×25%=25 法郎。这个故事里出现了“期望”这个词,数学期望由此而来。

例子:
某城市有 100000 100000 100000 个家庭,没有孩子的家庭有 4000 4000 4000 个,有一个孩子的家庭有 90000 90000 90000 个,有两个孩子的家庭有 6000 6000 6000 个,有3个孩子的家庭有 3000 3000 3000 个,则每个家庭期望有多少个孩子?

则此城市中任一个家庭中孩子的数目是一个随机变量,记为 X X X。它可取值 0 , 1 , 2 , 3 0,1,2,3 0,1,2,3

其中, X X X 0 0 0 的概率为 0.04 0.04 0.04,取 1 1 1 的概率为 0.9 0.9 0.9,取 2 2 2 的概率为 0.02 0.02 0.02,取 3 3 3 的概率为 0.02 0.02 0.02

设它的数学期望值为 E ( X ) E(X) E(X),则 E ( X ) = 0 × 0.01 + 1 × 0.9 + 2 × 0.02 + 3 × 0.02 = 1 E(X)=0\times0.01+1\times0.9+2\times0.02+3\times0.02=1 E(X)=0×0.01+1×0.9+2×0.02+3×0.02=1. 所以每个家庭期望有 1 1 1 个孩子。

现在,我们来把这种期望计算方法运用在编程题中。

[ABC350E] Toward 0

给定整数 n n n 。可以执行以下两种操作。

  1. 消耗 x x x 日元将 n n n 变为 ⌊ n a ⌋ \lfloor \frac{n}{a}\rfloor an
  2. 消耗 y y y 日元,在整数区间 [ 1 , 6 ] [1,6] [1,6] 内等概率选取一个整数 b b b ,将 n n n 变为 ⌊ n b ⌋ \lfloor \frac{n}{b}\rfloor bn

求在最优策略下将 n n n 变为 0 0 0 需要消耗的最少的日元。

同样的,可以通过 dfs 求期望需要的日元。

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,a,x,y;
map <int,double> dp;
double dfs(int u)
{
	if (!u) return 0;
	if (dp[u]) return dp[u];
	double f = x + dfs(u/a);
	double g = 6*y;
	for (int i = 2;i <= 6;i++) g += dfs(u/i);
	g /= 5.0;
	return dp[u] = min(f,g);
}
signed main()
{
	cin >> n >> a >> x >> y;
	printf("%.8lf",dfs(n));
	return 0;
}
  • 31
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值