分装备问题

分装备问题

概率


问题描述
假设打一个怪可能掉落n种装备,其概率分别为 p1p2p3...pn ,假设 nk=1pi=1 ,则玩家收集齐n个装备需要打怪的期望次数x为多少?


求解思路
设第一个掉落的装备为 ki 时期望为 Ei ,最终需要求的期望为 E

E=f(P)

E=i=1npiEi

Ei=1+(11pif(norm(Ppi)))

其中 f 表示在概率分布为 P 的情况下求解 E 的方程, norm(Ppi) 表示概率集合 P 剔除 pi 后的归一化概率概率集合。


解释
对于 Ei ,由于已经确定第一个掉落的是装备 ki ,因此其值至少为1.再假设从此以后不再掉落装备 ki ,则集齐剩余部分的期望 Ee=f(norm(Ppi)) 。再考虑有掉落 ki 的情况下,实质上相当于在不掉落k_i的情况下下每次以 pi 的概率插入一个装备,其值为 piEe 。对这部分插入的装备,又会以 pi 的概率插入装备k,其值为 p2iEe ,不断递推,可以得到最终公式 Ei=(1+pi+p2i...pni)Ee=1pni1piEe ,当n趋于无穷时可以得到

Ei=1+(11piEe)

得到 Ei 后即可推算出 E


程序

 
 
  1. double solve(vector<double>& p)
  2. {
  3. if(p.size() == 1)
  4. return 1/p[0];
  5. double ret = 0.0;
  6. for(int idx = 0; idx < p.size(); ++idx)
  7. {
  8. swap(p[idx], p[0]);
  9. vector<double> temp(p.begin()+1, p.end());
  10. double sum =accumulate(temp.begin(), temp.end(), 0.0);
  11. transform(temp.begin(), temp.end(), temp.begin(), [&sum](double x){return x/sum;});
  12. ret += p[0]*(1+1.0/(1-p[0])*solve(temp));
  13. }
  14. return ret;
  15. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值