牛客 比赛(概率dp)

从成功和失败两种情况转移

算成功的概率的时候,可以从失败的反向考虑比较简单。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int mod=1e9+7;
typedef long long ll;
double f[15][13];
double a[N];
double b[N];
double c[N];
double d[N];
int main(){
    int i;
    for(i=1;i<=12;i++){
        cin>>a[i];
    }
    for(i=1;i<=12;i++)
        cin>>b[i];
    for(i=1;i<=12;i++)
        cin>>c[i];
    for(i=1;i<=12;i++){
        d[i]=(1-a[i])*(1-b[i])*(1-c[i]);
        d[i]=1-d[i];
    }
    f[0][0]=1;
    for(i=1;i<=12;i++){
        f[i][0]=f[i-1][0]*(1-d[i]);
        for(int j=1;j<=12;j++){
            f[i][j]=f[i-1][j]*(1-d[i])+f[i-1][j-1]*d[i];
        }
    }
    for(i=0;i<=12;i++){
        printf("%.6f
",f[12][i]);
    }
}
View Code
原文地址:https://www.cnblogs.com/ctyakwf/p/12914878.html