#include<bits/stdc++.h>
using namespace std;
typedef long double ld;
const int MAXN = 50 * 1000 + 17;
ld p[MAXN];
ld dp1[2 * MAXN];
ld dp2[2 * MAXN];
int main () {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n, t;
cin >> n >> t;
for (int i = 0; i < n; i ++) {
cin >> p[i];
}
sort(p, p + n);
reverse(p, p + n);
ld wyn = 0;
//MAXN to 0 punktow
dp1[MAXN] = 1;
for (int i = 0; i < n; i ++) {
for (int j = -(i + 1); j <= (i + 1); j ++) {
dp2[j + MAXN] = dp1[j + MAXN - 1] * p[i] + dp1[j + MAXN + 1] * (ld(1) - p[i]);
}
ld aktwyn = 0;
for (int j = MAXN + t; j <= MAXN + i + 1; j ++) {
aktwyn += dp2[j];
}
wyn = max(wyn, aktwyn);
swap(dp1, dp2);
}
cout << fixed << setprecision(18) << wyn << "\n";
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 39 40 41 42 | #include<bits/stdc++.h> using namespace std; typedef long double ld; const int MAXN = 50 * 1000 + 17; ld p[MAXN]; ld dp1[2 * MAXN]; ld dp2[2 * MAXN]; int main () { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, t; cin >> n >> t; for (int i = 0; i < n; i ++) { cin >> p[i]; } sort(p, p + n); reverse(p, p + n); ld wyn = 0; //MAXN to 0 punktow dp1[MAXN] = 1; for (int i = 0; i < n; i ++) { for (int j = -(i + 1); j <= (i + 1); j ++) { dp2[j + MAXN] = dp1[j + MAXN - 1] * p[i] + dp1[j + MAXN + 1] * (ld(1) - p[i]); } ld aktwyn = 0; for (int j = MAXN + t; j <= MAXN + i + 1; j ++) { aktwyn += dp2[j]; } wyn = max(wyn, aktwyn); swap(dp1, dp2); } cout << fixed << setprecision(18) << wyn << "\n"; return 0; } |
English