TCO09 Round 1 KthProbableElement (dp或者 概率统计)

 

题目链接:http://www.topcoder.com/stat?c=problem_statement&pm=10335

题目大体意思:

在区间[lower,upper]中间取m个数,使得这m个数中第k小的数是n的概率

解法一:(强大的dp)参照别人解题报告写出来的

dp[m][s][b]  m个数,比n小的最多s个,比n大的最多b个的概率(注意最多二字)

dp[0][s][b]=1 这个初始化很重要

dp[m][s][b]=pe*dp[m-1][s][b] + ps*dp[m-1][s-1][b] + pb*dp[m-1][s][b-1] (当然要保证s-1b-1都大于0的才转换过来)

totel = upper-lower+1;

pe就是和n相等的概率  pe=1/totel;

ps就是比n小的概率  ps=(n-lower)/totel;

pb就是比n大的概率  pb=(upper-n)/totel;

 

解法二:概率分析统计

k个数是n,假设比n小的有a个,比n大的有b个,那么和n相等的就是M-a-b

只要保证a<=k-1 b<=M-k  那么第k个数就是n

那么每次取定的ab,对应的概率是:

C(M,a)*pa^a* C(M-a,b)*pb^b * pab^(M-a-b)  pa,pb,pab和上面的pspb类似

最后对符合条件的ab进行枚举,概率累加就可以

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值