codeforces 518D D. Ilya and Escalator(概率dp)
2015-08-14 19:59
369 查看
题目链接:
codeforces 518D题目大意:
有n个人,每秒有p的概率有一个人进电梯,问t秒后电梯里的人数的期望。题目分析:
定义dp[i][j]表示第i秒电梯里有j个人的概率。j!=n时,dp[i][j]=p⋅dp[i−1][j−1]+(1−p)⋅dp[i−1][j]dp[i][j] = p \cdot dp[i-1][j-1] + (1-p) \cdot dp[i-1][j]
j==n时,dp[i][j]=p⋅dp[i−1][j−1]+dp[i−1][j]dp[i][j] = p \cdot dp[i-1][j-1] + dp[i-1][j]
因为如果n个人用完了,那么后面的状态100%会继承当前状态的全部概率。
AC代码:
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #define MAX 2007 using namespace std; double dp[MAX][MAX],p; int n,t; int main ( ) { while ( ~scanf ( "%d%lf%d" , &n , &p , &t ) ) { memset ( dp , 0 , sizeof ( dp )); dp[0][0] = 1; for ( int i = 1 ; i <= t ; i++ ) for ( int j = 0 ; j <= n ; j++ ) { if ( j == n )dp[i][j] = dp[i-1][j]; else dp[i][j] = (1-p)*dp[i-1][j]; if ( j ) dp[i][j] += p*dp[i-1][j-1]; //sum[i][j] += sum[i-1][j] + dp[i][j]; } double ans = 0; for ( int i = 1 ; i <= n ; i++ ) ans += dp[t][i]*i; printf ( "%.7f\n" , ans ); } }
相关文章推荐
- Matlab中plot函数全功能解析
- 恶意程序敲诈者解析
- 欢迎使用CSDN-markdown编辑器
- Oracle开发中的正则表达式
- JPA学习笔记(7)——映射多对一关联关系
- Pixhawk飞控开发环境配置
- Datagrid添加右键菜单
- android版本获取
- 小白学开发(iOS)OC_ 基本数据类型的包装类(2015-08-14)
- visualsvn在win8下本地内网使用架设小记
- java正则表达式总结
- HDU 1098 Ignatius's puzzle(数学归纳法)
- 如何提高科研效率
- mysql登录和连接 权限
- 小白学开发(iOS)OC_ 常用结构体(2015-08-14)
- jeecms标签对应的类,方便查找标签的输入输出参数,以及参数对应的数值类型、范围
- poj 2367 Genealogical tree【拓朴排序模板题】
- 工作上的C/C++相关
- 小白学开发(iOS)OC_ 可变长度字符串(2015-08-14)
- Ubuntu linux 上搭建SERVER的相关使用说明