码迷,mamicode.com
首页 > 其他好文 > 详细

codeforces518d

时间:2018-12-01 00:01:11      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:写代码   src   \n   es5   概率   mes   pac   pen   ring   

题意:有一个电梯,有n个人准备上电梯,当前那个人准备上电梯的概率是p,然后让你求t秒后这个电梯可能的人数。

首先这个状态设置太简单,就是dp[i][j],表示在第i秒的时候这个电梯有j个人。然后求一个期望便可。但是我卡在了怎么处理dp那儿,卡了好久。

感觉还是没有想清楚就开始写代码的原因。

首先如果从当前人上不上的角度,可以分成两种,如果不上的话,如果j==n,那么肯定一点上一个是n,就是保证都上完了,那么dp[i][j]=dp[i-1][j]。如果j不等于n,那么dp[i][j]=dp[i-1][j]*(1-p);如果不是的话就只要考虑j!=0即可。

下面是代码:

                  

技术分享图片
 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <algorithm>
 5 #include <cmath>
 6 using namespace std;
 7 int n,t;
 8 double dp[2100][2100];
 9 double p;
10 int main(){
11     scanf("%d%lf%d",&n,&p,&t);
12     dp[0][0]=1.0;
13     for(int i=1;i<=t;i++){
14         for(int j=0;j<=n;j++){
15             if(j==n) dp[i][j]=dp[i-1][j];//如果j==n,那么肯定就是等于
16             else dp[i][j]=(1-p)*dp[i-1][j];//如果不等于的话,那么就只能*(1-p)
17             if(j) dp[i][j]+=(p)*dp[i-1][j-1];//如果不等于0才可能有上来的;
18         }
19     }
20     double ans=0;
21     for(int i=0;i<=n;i++) ans+=(dp[t][i]*i*1.0);
22     printf("%.10lf\n",ans);
23     return 0;
24 }
View Code

 

codeforces518d

标签:写代码   src   \n   es5   概率   mes   pac   pen   ring   

原文地址:https://www.cnblogs.com/pandaking/p/10046858.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!