期望DP——Kattis - researchproductivityindex

Kattis - researchproductivityindex

题意:

一个作者发论文,每个论文的成功率对应一个指数,现在有n篇论文,每个论文发表的成功率给出,问最大期望值。

题解:

概率的转移方程是 d [ i ] [ j ] = d [ i 1 ] [ j ] ( 1 a [ i ] ) + d [ i 1 ] [ j 1 ] a [ i ] d[i][j]=d[i-1][j]*(1-a[i])+d[i-1][j-1]*a[i]
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;
}
发布了181 篇原创文章 · 获赞 10 · 访问量 5068

猜你喜欢

转载自blog.csdn.net/weixin_42979819/article/details/104204360