转自:http://www.cppblog.com/aswmtjdsj/archive/2011/10/29/159321.html

题目大意:
说你手里有n个生物,n-1个人,1个吸血鬼。每一天,你从这堆里面随机挑出两头来,如果是不同种,那么人就有p的概率会被同化为吸血鬼。
求一个期望,问给定n和p的情况下,所有人变吸血鬼的期望天数D。

做法:
首先是要看出最基本的式子,就是在n个生物,n-x个人,x个吸血鬼的情况下抽出两头不同生物的概率:
假设分先后抽,那么先抽吸血鬼x / n , 后抽人 (n - x) / (n - 1) , 概率为 x * ( n - x) / (n * (n - 1));先抽人 (n - x) / n , 后抽吸血鬼 x / (n - 1) , 概率为 x * (n - x) / (n * ( n - 1))。
所以th[x](表示在n个生物,n-x个人,x个吸血鬼的情况下抽出两头不同生物的概率) = 2 * x * (n - x) / (n * (n - 1))。
然后就可以得出在某轮已有x个吸血鬼的前提下,吸血鬼数量增加1的概率为f[x] = th[x] * p 。而不变的概率则为g[x] = 1.0 - f[x]。

则可以建立如下概率转移图。Sx表示当前有x个吸血鬼。第k层的Sx的表示,到了第k-1天,有x个吸血鬼(的概率转移)。

所以可以看出Sx只和Sx-1和Sx本身有关。假设DP[x]表示由初始状态变成有x个吸血鬼所需天数的期望。
DP[x] = sigma(i = 1 to infinity)[f[x-1] * i * g[x-1] ^ (i - 1)]
而最终的期望即为所有期望之和ans = sigma(i=2 to n) DP[i]。
题目的关键就是DP[x]的求解,仔细观察这是一个等差乘等比的无穷级数求和,根据高中所学的错位相减法得到公式:
设Sn=DP[x],a=f[x-1],p=g[x-1]。则Sn-p*Sn=a+a*p+a*p^2....+a*p^n-1-n*a*p^n
Sn=a*[(1-p^n) - n*(1-p)*p^n]/(1-p)^2
lim(n->inf) Sn=a/(1-p)^2=1/a
所以最后的ans=sigma(1/a[i])=sigma(1.0/(2.0*p*i*(n-i)/(n*(n-1))))。
因为n在10^5级别,所以要用double乘,不然int会爆精度。

zoj 3351 Bloodsucker相关推荐

  1. zoj 3351 Bloodsucker(概率 dp)

    题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4530 dp[i]表示现在存在i个吸血鬼要达成目标(全为吸血鬼)天数的数学 ...

  2. ZOJ.3551.Bloodsucker(期望DP)

    题目链接 \(Description\) 有1个吸血鬼和n-1个人,每天有且只会有两个人/吸血鬼相遇,如果是人与吸血鬼相遇,那个人会有p的概率变成吸血鬼:否则什么也不发生.求n个都变成吸血鬼的期望天数 ...

  3. UVa在线比赛单题汇总-----DP专题

    动态规划基础 例题 LA 3882 UVa 3882 - And Then There Was One 递推------------无力orz UVa 10635 10635 - Prince and ...

  4. ZOJ 2723 Semi-Prime ||ZOJ 2060 Fibonacci Again 水水水!

    两题水题: 1.如果一个数能被分解为两个素数的乘积,则称为Semi-Prime,给你一个数,让你判断是不是Semi-Prime数. 2.定义F(0) = 7, F(1) = 11, F(n) = F( ...

  5. zoj 1204 Additive equations

    ACCEPT acm作业 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=204 因为老师是在集合那里要我们做这道题.所以我很是天 ...

  6. 【HDU/POJ/ZOJ】Calling Extraterrestrial Intelligence Again (素数打表模板)

    http://poj.org/problem?id=1411  POJ http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=168 ...

  7. 模拟 ZOJ 3878 Convert QWERTY to Dvorak

    题目传送门 1 /* 2 模拟:手敲map一一映射,累! 3 除了忘记读入字符串不能用gets用getline外还是很顺利的AC了:) 4 */ 5 #include <cstdio> 6 ...

  8. 矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence

    题目传送门 1 /* 2 题意:加上适当的括号,改变计算顺序使得总的计算次数最少 3 矩阵连乘积问题,DP解决:状态转移方程: 4 dp[i][j] = min (dp[i][k] + dp[k+1] ...

  9. ZOJ 3597 Hit the Target! (线段树扫描线 -- 矩形所能覆盖的最多的点数)

    ZOJ 3597 题意是说有n把枪,有m个靶子,每把枪只有一发子弹(也就是说一把枪最多只能打一个靶子), 告诉你第 i 把枪可以打到第j个靶, 现在等概率的出现一个连续的P把枪,在知道这P把枪之后,你 ...

  10. 九度OJ—题目1032:ZOJ

    题目描写叙述: 读入一个字符串.字符串中包括ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出.当某个字符用完时,剩下的仍然依照ZOJ的顺序输出. 输入: 题目包括多组用例,每组用例占一行,包括ZOJ ...

最新文章

  1. 【活动】人工智能产学研生态建设研讨会报名
  2. 使用面部标记提取和深度神经网络进行“昏昏欲睡”的检测
  3. python -- numpy 基本数据类型,算术运算,组合,分割 函数
  4. TensorRT was linked against cuBLAS/cuBLAS LT 11.2.0 but loaded cuBLAS/cuBLAS
  5. 8953n的user获取权限以及remount
  6. PHP实现简单顺序栈
  7. 8750H带的动MATLAB2019吗,[多图]九代i7-9750H笔记本标压处理器与前代8750H性能对比
  8. puppet enc mysql_精通Puppet配置管理工具
  9. 安卓应用安全指南 5.2.2 权限和保护级别 规则书
  10. mysql noinstall 5.5_mysqlnoinstall 手动安装
  11. spark练习--统计xxx大学的各个少数名族的情况
  12. python做数据可视化的优势_用Python进行数据可视化的10种方法
  13. 大型工业互联网项目(5000w+)投标复盘
  14. 用C语言数组编写贪吃蛇
  15. AgentWeb嵌套h5 上传图片文件
  16. python的常用集成开发环境_【分享|10个超好用的Python集成开发环境推荐】- 环球网校...
  17. 2022“航天宏图杯”遥感影像耕地变化检测第四名方案简介
  18. GitHub新漏洞!4行代码轰炸出6千万封电子邮件
  19. 评:从决赛能看到什么?我个人认为.五年内周宇是五人的冠军!!
  20. 在vue中使用velocity动画库实现列表交错过渡

热门文章

  1. matlab求解常微分方程的实验,实验五 - - 用matlab求解常微分方程
  2. VScode comment translate 无法使用问题
  3. 命令查看计算机出厂时间,Check cosmetics or perfume production date and shelf life by the batch code....
  4. C# 利用 OleDb 组件操作 Excel 进行文件读写操作
  5. 【双足轮机器人】Ascento技术详解--(1)摘要和引言(2)系统描述【翻译】
  6. 谷歌身份验证器电脑版 Google Authenticator下载+使用教程
  7. c# FileHelper 对文件压缩解压,压缩包加密
  8. WeaveSocket框架-Unity太空大战游戏-服务端-1
  9. html5中display flex,display:flex属性
  10. 第二十九章、containers容器类部件QFrame框架部件详解