ZOJ3329 One Person Game

5 篇文章 0 订阅

题目大意:

有三个骰子,分别有K1K2K3个面,一次投掷可以得到三个骰子点数加和的分数,但是,当骰子1等于A,骰子2=B,骰子3=C时,结果清零。问从0开始,分数超过N时投掷次数的期望。

问题分析:

在网上找了好多题解,基本上都是一样的,看了好久才看懂,觉得有必要写一下这题的题解。

1、在刚看到这题的时候,就想着用暴力方法解决,直接枚举次数,计算概率:

          dp[i][j]-->d[i+1][j+k],dp[i+1][0]dp表示前i次,得到j的概率)

       但是,在TLE之后果断放弃了。

2、既然暴力不行,不妨换个角度来思考。设E[i]表示从i分开始,需要投掷几次才能超过N的期望,那么,就能推出递推式:E[i]=sum(E[i+k]*P[k])+E[0]*P[0]+1(就这个公式,看了好久看不懂T_T)其实就是从E[i]可以转移到E[i+k],花费一次掷骰子的机会,且概率是P[k],反向来看就是E[i]到结束的次数应该是E[i+k]的次数加一,并且是考虑概率的。

如果说考虑到这一点并不难,因为只是把角度改为了逆推,那么下面的这个变形就真的是完全想不到了:

看到上面的递推式分为两部分:与E[0]有关和与它无关,于是将E[i]构造成一个关于它的式子:

E[i]=A[i]*E[0]+B[i]

然后带入原方程:

E[i]=sum(A[i+k]*E[0]*P[k]+B[i]*P[k])+E[0]*P[0]+1

   =(sum(A[i+k]*P[k])+P[0])*E[0]+sum(B[i]*P[k])+1

所以A[i]=sum(A[i+k]*P[k])+P[0]

     B[i]=sum(B[i]*P[k])+1

得到这个式子之后就可以用ON*K)的递推求出A[0]B[0]了。

在带回到构造出的方程中:E[0]=A[0]*E[0]+B[0],变形后就得到结果了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值