100 个箱子抽奖,每一轮可以选择某一个箱子进行抽奖,每个箱子有一定概率抽中和抽不中,抽中按照reward奖励。
箱子分值 rewards
e.g.[1, 2, 3, …, 99, 100]
抽中概率 probs
e.g. [1.0, 0.99, 0.98, …, 0.02, 0.01]
每一轮有该概率抽中得分,抽不中就游戏结束不能继续下一轮,每一轮可以重复用箱子。
求 x 轮抽奖的最大期望,每个箱子可以重复抽
function draw(List< int >: rewards, List< float >: probs, int: x)
(按照我的理解尽可能还原题目了。如果有见过题目的发现错误欢迎纠正。。)
可能的解法:
一轮:
dp1 = max(reward_i*prob_i)
二轮:
dp2 = max((reward_i+dp1)*prob_i)
以此类推
dp_k = max((reward_i+dp_k-1)*prob_i)
。。。。。。
Xavier
(Xavier)
8
积分的期望单轮最大是50或51,都是 25.5。但问题是失败率是 50%,这样意味着抽箱子终止。
如果我一直抽1,这样可以保证一直抽,那不是无穷大么?
当然题目问的是x轮,这个x就很重要了。
答案跟x有关。
Xavier
(Xavier)
9
补充一下来源,这题我怎么觉得应该是ML或DS考的,不像是码工。我感觉是写错了,这两题都像ds的。
确实是和X有关,关系到游戏进行到几轮,和博弈问题很像
Lin_Li
(Linearmi)
13
我觉得你可以考虑把整个100盒子抽奖看做是一次抽奖,可以算出对应抽中的概率,和对应的reward,这样就可以把整个问题看做是超几何分布,你就可以去算第X轮的期望了,这是我的理解
但是每一轮都可以挑选一个有最好期望的箱子再开奖?
这是我不理解的地方之一。
我是这样理解得:
第k轮假设选了第j个箱子,那么此时可以获得到最大的points
dp[k][j] = max(dp[k][j], dp[k-1][t] + rewards[j]*pros[j]*pros[t]) t是从1到100都有遍历一遍 (空间是可以优化的)