/*
首先,没有模意义下:
用f[i,j]表示前i题做对j题的集合,值为概率
那么f[i,0] = f[i-1,0]*(1-pi)
f[i,j] = f[i-1,j-1]*pi + f[i-1,j]*(1-pi)
那么在模意义下:
得到的全部概率都是对1e9+7取模得到的pi,即 b*p = a + k*(1e9+7)
那么(1-pi)对1e9+7取模, 就可以用(1-pi+mod)%mod
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
ll mod = 1e9+7;
const int N = 2005;
ll p[N];
ll f[N][N];
int n;
int main(){
scanf("%d",&n);
for(int i = 1;i <= n;i++) scanf("%lld",p+i);
f[0][0] = 1;
for(int i = 1;i <= n;i++){
f[i][0] = f[i-1][0]*(1-p[i]+mod)%mod;
for(int j = 1;j <= n;j++){
f[i][j] = (f[i-1][j-1]*p[i]%mod + f[i-1][j]*(1-p[i]+mod)%mod)%mod;
}
}
for(int i = 0;i <= n;i++){
printf("%lld ",f[n][i]);
}
return 0;
}
2020牛客寒假训练营2--C题
猜你喜欢
转载自blog.csdn.net/weixin_44083561/article/details/104210769
今日推荐
周排行