#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; } |
English