题目描述

CX在Minecraft里建造了一个刷怪塔来杀僵尸。刷怪塔的是一个极高极高的空中浮塔,边缘是瀑布。如果僵尸被冲入瀑布中,就会掉下浮塔摔死。浮塔每天只能工作 $t$秒,刷怪笼只能生成 $N$ 只僵尸,这些僵尸在一开始就全部生成,位于瀑布上。由于CX是拿着手机搭的浮塔,难免有些建筑方面的缺陷,导致不是所有僵尸都会被冲下去。详细地说,在这 $t$秒内,每秒冲下一只僵尸(如果有的话)的概率为 $P$ ,这只僵尸一秒内没有被冲下的概率为$1-P$。

CX想知道他一天内杀死的僵尸的期望数量。

输入格式

输入共一行,三个数N、P、t如题意。

输出格式

输出数学期望,并四舍五入保留七位小数。

--------------------------------------------------

设$f[i][j]$表示$i$秒冲下$j$只僵尸的概率。得到递推式:

$f[i][j]=p*f[i-1][j-1]+(1-p)*f[i-1][j]$

特别地,有:

$f[i][n]=f[i-1][n]+p*f[i-1][n-1]$

注意边界:$f[0][0]=1,f[i][0]=(1-p)*f[i-1][0],f[0][i]=0$。

$ans=\sum\limits_{i=1}^n f[t][i]*i$

代码:

#include<bits/stdc++.h>
using namespace std;
double ans,f[][],p,q;
int n,t;
int main()
{
scanf("%d%lf%d",&n,&p,&t);
q=-p;
f[][]=;
for (int i=;i<=n;i++) f[][i]=;
for (int i=;i<=t;i++) f[i][]=q*f[i-][];
for (int i=;i<=t;i++)
for (int j=;j<=n-;j++)
f[i][j]=p*f[i-][j-]+q*f[i-][j];
for (int i=;i<=t;i++) f[i][n]=f[i-][n]+p*f[i-][n-];
for (int i=;i<=n;i++) ans+=f[t][i]*i;
printf("%.7lf",ans);
return ;
}

最新文章

  1. Java算法之递归打破及在真实项目中的使用实例
  2. MacDev.Mach-O.Programming-Part-III:MachOView-v2.4.9200.dmg-crash
  3. Atitit 发帖机系列(8) &#160;词法分析器v5 版本新特性说明)
  4. 关于Hash集合以及Java中的内存泄漏
  5. UWP开发-重新理解MVVM
  6. 解决“运行arm-linux-gcc命令,提示No such file or directory”的问题
  7. UI篇--Android中TableLayout中的布局
  8. Spring XD 1.1 M2 and 1.0.3 released---support kafka
  9. kiss框架学习
  10. swift之属性
  11. Pytorch系列教程-使用字符级RNN生成姓名
  12. jquery 判断浏览器版本
  13. Django的Hello World
  14. xhprof扩展安装与使用
  15. ES6 函数的扩展-rest参数
  16. zoj 1151 Word Reversal(字符串操作模拟)
  17. leetcode--539. Minimum Time Difference
  18. centos7 离线安装Ambari
  19. 贪心算法or背包问题
  20. 用C语言显示汉字的演示程序

热门文章

  1. 《Spring全局异常处理》从零掌握@ControllerAdvice注解
  2. 一个例子理解c++函数模板的编译
  3. spring boot实现简单的登录拦截
  4. bzoj2132圈地计划
  5. OSCP Learning Notes - Buffer Overflows(5)
  6. v-bind v-on 缩写
  7. echarts 实战 : 怎么写出和自动生成的一样的 tooltip ?
  8. html命名规则
  9. final总结
  10. Java Object类中的equals方法