#include <bits/stdc++.h> using namespace std; long double dp[100007][2]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, t; long double x, wyn = 0.0, tempwyn; cin >> n >> t; vector<long double> pr; for(int i = 0; i < n; i++) { cin >> x; pr.push_back(x); } sort(pr.begin(), pr.end()); reverse(pr.begin(), pr.end()); dp[50002][0] = 1.0; for(int i = 1; i <= n; i++) { tempwyn = 0.0; for(int j = n; j >= -n; j--) { dp[50002 + j][i % 2] = pr[i - 1] * dp[50002 + j - 1][(i + 1) % 2] + (1.0 - pr[i - 1]) * dp[50002 + j + 1][(i + 1) % 2]; //cout << i << " " << j << " " << dp[i][j] << endl; } for(int j = t; j <= n; j++) { tempwyn += dp[50002 + j][i % 2]; } wyn = max(wyn, tempwyn); } cout << fixed << setprecision(10) << wyn << endl; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <bits/stdc++.h> using namespace std; long double dp[100007][2]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, t; long double x, wyn = 0.0, tempwyn; cin >> n >> t; vector<long double> pr; for(int i = 0; i < n; i++) { cin >> x; pr.push_back(x); } sort(pr.begin(), pr.end()); reverse(pr.begin(), pr.end()); dp[50002][0] = 1.0; for(int i = 1; i <= n; i++) { tempwyn = 0.0; for(int j = n; j >= -n; j--) { dp[50002 + j][i % 2] = pr[i - 1] * dp[50002 + j - 1][(i + 1) % 2] + (1.0 - pr[i - 1]) * dp[50002 + j + 1][(i + 1) % 2]; //cout << i << " " << j << " " << dp[i][j] << endl; } for(int j = t; j <= n; j++) { tempwyn += dp[50002 + j][i % 2]; } wyn = max(wyn, tempwyn); } cout << fixed << setprecision(10) << wyn << endl; return 0; } |