#include <bits/stdc++.h>
using namespace std;
#define ull unsigned long long
#define ll long long
#define ld long double
#define mn2 262144
#define nw '\n'
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n, t;
cin>>n>>t;
vector<ld> v(n);
for(auto &x:v) cin>>x;
sort(v.rbegin(), v.rend());
ld max_prob=0.0;
vector<ld> dp={1.0};
for(int i=0; i<n; ++i) {
vector<ld> dp2(dp.size()+1, 0.0);
ld vi=v[i];
dp2[0]=dp[0]*(1-vi);
for (int j=1; j<(int)dp2.size()-1; ++j) dp2[j]=dp[j]*(1-vi)+dp[j-1]*vi;
dp2.back()=dp.back()*vi;
dp=move(dp2);
int k=i+1;
if(k>=t){
int c=(t+k+1)/2;
if(c>k) continue;
ld prob=0.0;
for(int j=c; j<=k; ++j) if (j<dp.size()) prob+=dp[j];
if(prob>max_prob) max_prob=prob;
}
}
cout<<fixed<<setprecision(20)<<max_prob<<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 | #include <bits/stdc++.h> using namespace std; #define ull unsigned long long #define ll long long #define ld long double #define mn2 262144 #define nw '\n' int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, t; cin>>n>>t; vector<ld> v(n); for(auto &x:v) cin>>x; sort(v.rbegin(), v.rend()); ld max_prob=0.0; vector<ld> dp={1.0}; for(int i=0; i<n; ++i) { vector<ld> dp2(dp.size()+1, 0.0); ld vi=v[i]; dp2[0]=dp[0]*(1-vi); for (int j=1; j<(int)dp2.size()-1; ++j) dp2[j]=dp[j]*(1-vi)+dp[j-1]*vi; dp2.back()=dp.back()*vi; dp=move(dp2); int k=i+1; if(k>=t){ int c=(t+k+1)/2; if(c>k) continue; ld prob=0.0; for(int j=c; j<=k; ++j) if (j<dp.size()) prob+=dp[j]; if(prob>max_prob) max_prob=prob; } } cout<<fixed<<setprecision(20)<<max_prob<<endl; return 0; } |
English