#include <bits/stdc++.h> using namespace std; #define ld double int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n,t; cin >> n >> t; vector<ld> vec(n+1); for (int i = 1; i<=n; i++)cin >> vec[i]; sort(vec.begin()+1,vec.end(),greater<ld>()); vector<ld> vec_dop(n+1); for (int i = 1; i<=n; i++)vec_dop[i]=1.-vec[i]; ld mx=0; vector<ld> prv(n+1); vector<ld> now(n+1); prv[0]=now[0]=1.; for (int i = 1; i<=n; i++){ for (int j = 1; j<=i; j++)now[j]=vec[i]*prv[j-1]+vec_dop[i]*prv[j]; mx=max(mx,now[(i+t+1)/2]); swap(prv,now); } cout << fixed << setprecision(9) << mx << '\n'; }
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 | #include <bits/stdc++.h> using namespace std; #define ld double int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n,t; cin >> n >> t; vector<ld> vec(n+1); for (int i = 1; i<=n; i++)cin >> vec[i]; sort(vec.begin()+1,vec.end(),greater<ld>()); vector<ld> vec_dop(n+1); for (int i = 1; i<=n; i++)vec_dop[i]=1.-vec[i]; ld mx=0; vector<ld> prv(n+1); vector<ld> now(n+1); prv[0]=now[0]=1.; for (int i = 1; i<=n; i++){ for (int j = 1; j<=i; j++)now[j]=vec[i]*prv[j-1]+vec_dop[i]*prv[j]; mx=max(mx,now[(i+t+1)/2]); swap(prv,now); } cout << fixed << setprecision(9) << mx << '\n'; } |