Kattis - researchproductivityindex
题意:
一个作者发论文,每个论文的成功率对应一个指数,现在有n篇论文,每个论文发表的成功率给出,问最大期望值。
题解:
概率的转移方程是
dp[i][j]表示前i个论文成功了j个;
剩下的期望也就是得到某个指标的值乘以得到他的概率。
#include <bits/stdc++.h>
using namespace std;
const int N=1005+7;
double a[N];
double f[N][N];
int main(){
int n; scanf("%d",&n);
for(int i=1;i<=n;i++) {scanf("%lf",a+i);a[i]/=100.0;}
sort(a+1,a+1+n,greater<double>() );
f[0][0]=1;
for(int i=1;i<=n;i++) f[i][0]=f[i-1][0]*(1-a[i]);
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
f[i][j]=f[i-1][j-1]*a[i]+f[i-1][j]*(1-a[i]);
}
}
double res=0;
for(int i=1;i<=n;i++){
double ans=0;
for(int j=1;j<=i;j++){
ans+=f[i][j]*pow(j,1.0*j/(1.0*i));
}
res=max(res,ans);
}
printf("%.9lf\n",res);
return 0;
}