期望类题目如何DP(abc314-e题解)

题意:有 NNN 个转盘,第 iii 个转盘上有 PiP_iPi 个数 Si,1S_{i,1}Si,1Si,PiS_{i,P_i}Si,Pi,每玩一次转盘会从中随机选取一个数作为这次的得分,每玩一次这个转盘花费 CiC_iCi 元。

求总得分为 MMM 时,花费钱数的期望。


赛时做了一个小时只写出一个错误的贪心,我们不妨从这个失败的贪心出发,聊聊期望类题目的正解做法。


错误思路:

我们不妨考虑如下的贪心策略:

计算出每个转盘上所有数的平均值作为玩一次这个转盘得数的期望,再除以每个转盘玩一次的价格,找到其中的最大值,用 MMM 除以这个最大值得到答案。

部分代码:

	for(int i = 1; i <= n; i = i + 1)
	{
   
   
		cin >> c[i] >> p[i];
		for(int j = 1; j <= p[i]; j = j + 1)
		{
   
   
			cin >> s;
			if(s > m)
				s = m;	// 赛时写的一个毫无卵用的优化
			sum[i] += s;
		}
		ave[i] = sum[i] / double(p[i]);
		ave[i] /= c[i];
	}
	sort(ave + 1, ave + 1 + n, cmp);
	cout << m / ave[1];

这应该算是一个很多人都可能会考虑到的贪心策略了,但是其正确性究竟怎样呢?

考虑这样的数据:

N = 2
M = 100
第一个轮盘玩一次 100 元
0 0 0 0 100
第二个轮盘玩一次 100 元
0 0 0 0 0 0 0 1000

可以计算出,下面的轮盘玩一次平均获得 125125125 元,而上面的轮盘每玩一次平均仅获得 2020

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值