#include <iostream> #include <stdio.h> #include <cstring> #define N 501 using namespace std; int n; double p; double pa[N][N]; double pow[N]; void Init() { memset(pa,0,sizeof(pa)); pow[0]=1; for(int i=1;i<N;i++) { pow[i] = pow[i-1]*p; } } void Do() { for(int i=0;i<=n;i++) { for(int j=0; j<=n; j++) { if(i-j<=0) pa[i][j] = 1; else if(i-j-1==0) pa[i][j]=pa[i-1][j]-pow[j+1]; else if(i-j-2>=0) pa[i][j]=pa[i-1][j]-pa[i-j-2][j]*(1-p)*pow[j+1]; } } double ans = 0; for(int i=1;i<=n;i++) { ans += (pa[n][i]-pa[n][i-1])*i; } printf("%.6lf\n",ans); } int main() { while(scanf("%d %lf",&n,&p)!=EOF && n) { Init(); Do(); } return 0; }
时间: 2024-10-17 10:40:55