题目地址:http://codeforces.com/problemset/problem/518/D
思路:dp[i][j]表示第i秒有j个人。
j==n时,d[i][j]=d[i-1][j-1]*p+d[i-1][j]
j==0时,d[i][j] = d[i - 1][j] * (1 - p)
其他,d[i][j] = d[i - 1][j - 1] * p + d[i - 1][j] * (1 - p)
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=2050;
int n,t;
double p;
double d[maxn][maxn];
int main()
{
scanf("%d%lf%d",&n,&p,&t);
d[0][0]=1;
for(int i=1; i<=t; i++)
for(int j=0; j<=n; j++)
{
if(j==0) d[i][j]=d[i-1][j]*(1-p);
else if(j==n) d[i][j]=d[i-1][j]+d[i-1][j-1]*p;
else d[i][j]=d[i-1][j-1]*p+d[i-1][j]*(1-p);
}
double ans=0.0;
for(int i=0;i<=n;i++)
ans+=d[t][i]*i;
printf("%f\n",ans);
return 0;
}