Click Here
题意:给出n张试卷,以及每张试卷的通过概率,求使得该公式最大的值x^(x/y)
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<functional>
#include<algorithm>
using namespace std;
int main()
{
double dp[110][110],b[110];
int a[110];
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&a[i]);
sort(a+1,a+1+n,greater<int>());
for(int i=1;i<=n;++i)
b[i]=a[i]*1.0/100;
dp[0][0]=1.0;
for(int i=1;i<=n;++i)
{
dp[i][0]=dp[i-1][0]*(1-b[i]);
for(int j=1;j<i;++j)
dp[i][j]=dp[i-1][j]*(1-b[i])+dp[i-1][j-1]*b[i];
dp[i][i]=dp[i-1][i-1]*b[i];
}
double ma=0;
for(int i=1;i<=n;++i)
{
double ans=0;
for(int j=1;j<=i;j++)
ans+=dp[i][j]*pow(j,j*1.0/i);
ma=max(ma,ans);
}
printf("%.9lf\n",ma);
}