fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. class Coins1 {
  5. public:
  6. double moreHead(vector<double>& probs, int n) {
  7. vector<vector<double>> dp(n+1, vector<double>(n+1, 0.0));
  8.  
  9. dp[0][0] = 1.0;
  10.  
  11. for(int i = 1; i <= n; ++i) {
  12. dp[i][0] = dp[i-1][0] * (1 - probs[i-1]);
  13. for(int j = 1; j <= i; ++j) {
  14. dp[i][j] =
  15. dp[i-1][j] * (1 - probs[i-1])
  16. + dp[i-1][j-1] * probs[i-1];
  17. }
  18. }
  19.  
  20. double ans = 0.0;
  21. for(int j = n/2 + 1; j <= n; ++j) {
  22. ans += dp[n][j];
  23. }
  24. return ans;
  25. }
  26. };
  27.  
  28. int main() {
  29. int n;
  30. cin >> n;
  31. vector<double> probs(n);
  32. for(int i = 0; i < n; ++i) cin >> probs[i];
  33.  
  34. Coins1 obj;
  35. cout << fixed << setprecision(10)
  36. << obj.moreHead(probs, n) << endl;
  37. return 0;
  38. }
  39.  
Success #stdin #stdout 0s 5316KB
stdin
5
0.42 0.01 0.42 0.99 0.42
stdout
0.3821815872