题意:输入n,p,t表示n个人排成一队上电梯,每个时间单位只能上去队首的那一个人,而且这个人上电梯成功的概率是p,电梯无限载重,可以容下所有人,问你在t单位时间这个时间点电梯中人数的期望值
题解:dp[x][y]表示y时刻电梯中有x个人的概率,考虑上去成功、上去失败两种情况、没有人排队这三种情况
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <vector> #include <cmath> #include <algorithm> #define Max(a,b) (a>b?a:b) #define Min(a,b) (a<b?a:b) #define mod 1000000007 #define LL __int64 #define M 2010 using namespace std; double dp[M][M]; int main() { int n,t,i,j,k,l; double p; while(cin>>n>>p>>t) { memset(dp,0,sizeof(dp)); dp[0][0]=1; for(i=1;i<=t;i++)dp[0][i]=dp[0][i-1]*(1-p); for(i=1;i<=n;i++)//现求出概率 for(j=i;j<=t;j++) { //dp[i][j]=p; dp[i][j]+=dp[i-1][j-1]*p;//加上 前一个状态*成功上电梯的概率 if(i==n)dp[i][j]+=dp[i][j-1];//如果没有人可以上电梯了,直接传递概率值 else dp[i][j]+=dp[i][j-1]*(1.0-p);//加上 前一个状态*未成功上电梯的概率 } double sum=0; for(i=1;i<=n;i++)//然后求期望 sum+=dp[i][t]*i; printf("%.7lf\n",sum); } return 0; }