#0007. 赢

题目大意:

  x和y玩游戏。x赢的概率是A%,输的概率是B%,平局概率是C%(A+B+C=100)。当有任意一个人赢n局是游戏结束。求游戏进行的期望局数。

  n<=100000

题目解法:

  首先我们考虑到平局处理起来比较麻烦先忽略掉这种情况。那么我们的局数一定在[n,2n)这个范围内。

  因此我们可以用f[i]表示游戏在i局后结束(不包括平局)的概率。显然f[i]的值可以用排列组合算出。

  有了概率以后我们还需要直到i局游戏对应的期望总局数。显然非平局的局数应该占(A+B)%,因此我们可以算出对于个i这个期望总局数为i*100/(A+B)

  这样有了概率和期望贡献我们就可以求期望了。

  *对错误想法的反思:一开始想的是f[x][y]表示一个人赢x局一个人赢y局直到比赛结束的期望局数。也写出了一个看起来很工整的状态转移方程但尝试优化了很久都没有进展。嗯显然f[x][y]从带系数的f[x+1][y]和f[x][y+1]转移还有常数项很不好优化的。因此当直接算期望的状态无法满足时间限制是多考虑期望的线性性质,寻找n(泛指)种不同的独立的贡献来源,算出该位置产生贡献的概率(此题中的f)和期望的贡献值。

  *和其他题的联系:这题让我联想到了之前AtCoder educational dp round的一道题:Sushi。那道期望dp的做法也是将不好处理的东西单独拎出来计算。所谓不好处理的东西 在这题中是平局 在那题中是空盘子。精髓就在于将奇怪操作和好算的操作等比例绑定

猜你喜欢

转载自www.cnblogs.com/myrcella/p/12896252.html