概率dp——cf518D
通过最后的概率求最终的期望
#include<bits/stdc++.h> using namespace std; const int maxn = 2005; double p,dp[maxn][maxn]; int n,t; int main(){ cin>>n>>p>>t; dp[0][n]=1; for(int i=1;i<=t;i++){ dp[i][0]=dp[i-1][0]+dp[i-1][1]*p; for(int j=1;j<=n;j++) dp[i][j]=dp[i-1][j]*(1-p)+dp[i-1][j+1]*p; } double ans=0; for(int i=0;i<=n;i++) ans+=1.0*dp[t][i]*(n-i); printf("%.10lf\n",ans); }