概率DP——比赛

    科技2022-07-10  146

    题解:

    我们知道一个题做不出的概率,用1减去就是能做的概率,然后直接概率dp就行了。 f ( i , j ) f(i,j) f(i,j)代表前i个题能做出j个题的概率。

    #include <bits/stdc++.h> //#define int long long using namespace std; const int N=1e6+10; double a[N],b[N],c[N],d[N]; double f[100][100]; void solve() { for(int i=1;i<=12;i++) cin>>a[i]; for(int i=1;i<=12;i++) cin>>b[i]; for(int i=1;i<=12;i++) cin>>c[i]; for(int i=1;i<=12;i++){ d[i]=1.0-1.0*(1-a[i])*(1-b[i])*(1-c[i]); // cout<<"----"<<d[i]<<endl; } f[0][0]=1; for(int i=1;i<=12;i++){ f[i][0]=f[i-1][0]*(1-d[i]); for(int j=1;j<=i;j++){ f[i][j]=f[i-1][j]*(1-d[i])+f[i-1][j-1]*d[i]; } } for(int i=0;i<=12;i++) printf("%.6lf\n",f[12][i]); } signed main() { solve(); }
    Processed: 0.012, SQL: 8