#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,t;
cin>>n>>t;
vector<long double> p(n);
for(int i =0;i<n;i++)
{
cin>>p[i];
}
sort(p.begin(),p.end());
reverse(p.begin(),p.end());
int sn = floor(sqrt(n));
vector<long double> pr(n*2+1);
for(int i = 0;i<n*2+1;i++)
{
pr[i] = 0;
}
pr[n] = 1;
long double ans = 0;
for(int i = 0;i<n;i++)
{
long double cans = 0;
vector<long double> cu(n*2+1);
for(int j = 0;j<2*n+1;j++)
{
cu[j] = 0;
}
for(int j = 0;j<2*n+1;j++)
{
if(pr[j] != 0)
{
cu[j+1] += pr[j] * p[i];
cu[j-1] += pr[j] * (1 - p[i]);
}
}
pr = cu;
for(int j = n+t ;j<2*n+1;j++)
{
cans+=pr[j];
}
ans = max(ans,cans);
}
cout<<fixed<<setprecision(8)<<ans<<"\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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include <bits/stdc++.h> using namespace std; int main() { int n,t; cin>>n>>t; vector<long double> p(n); for(int i =0;i<n;i++) { cin>>p[i]; } sort(p.begin(),p.end()); reverse(p.begin(),p.end()); int sn = floor(sqrt(n)); vector<long double> pr(n*2+1); for(int i = 0;i<n*2+1;i++) { pr[i] = 0; } pr[n] = 1; long double ans = 0; for(int i = 0;i<n;i++) { long double cans = 0; vector<long double> cu(n*2+1); for(int j = 0;j<2*n+1;j++) { cu[j] = 0; } for(int j = 0;j<2*n+1;j++) { if(pr[j] != 0) { cu[j+1] += pr[j] * p[i]; cu[j-1] += pr[j] * (1 - p[i]); } } pr = cu; for(int j = n+t ;j<2*n+1;j++) { cans+=pr[j]; } ans = max(ans,cans); } cout<<fixed<<setprecision(8)<<ans<<"\n"; } |
English