I - Coins
キーワード
解説
に対して、 を次のように定義する。
枚目までのコインのうち 枚が表である確率
である。 枚目までのコインのうち 枚が表であるのは、 枚目が表かつ 枚目までのうち 枚が表であるか、 枚目が裏かつ 枚目までのうち 枚が表である場合である。
したがって、次のように遷移式を書くことができる。
今回知りたいのは、 枚のコインのうち半分以上が表である確率だから、
が最終的な答えとなる。
計算量は である。
提出コード
int main() {
int n; cin >> n;
vector<double> P(n); rep(i, 0, n) cin >> P[i];
vector<vector<double>> dp(n+1, vector<double>(n+1, 0));
dp[0][0] = 1;
rep(i,1,n+1) dp[i][0] = dp[i-1][0] * (1 - P[i-1]);
rep(i,1,n+1) rep(j,1,n+1) {
dp[i][j] = dp[i-1][j-1] * P[i-1] + dp[i-1][j] * (1 - P[i-1]);
}
double ans = 0;
rep(i, (n+1)/2, n+1) ans += dp[n][i];
cout << fixed << setprecision(10) << ans << endl;
}