• 京东笔试---通过考试(DP)


    题目描述 

        小明同学要参加一场考试,考试一共有n道题目,小明必须作对至少60%的题目才能通过考试。考试结束后,小明估算出每题作对的概率,p1,p2,...,pn,你能帮他算出他通过考试的概率吗?

    输入

        输入第一行一个数n(1<=n<=100),表示题目的个数,第二行n个整数,p1,p2,...,pn,表示小明有pi%的概率作对第i题。(0<=pi<=100)

    输出

        小明通过考试的概率,最后结果四舍五入,保留小数点后五位。

    样例输入

        4

        50 50 50 50

    样例输出

        0.31250

    Hint

        第一个样例中,每道题做对的概率都是0.5,想要通过考试至少要作对三题。所以最后的答案就是(C4(3)+C4(4))*0.5^4=5/16;

    代码如下:

    #include<iostream>
    #include<algorithm>
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    using namespace std;
    double dp[105][105];
    double s[105];
    double p[105];
    
    int main()
    {
        int n;
        scanf("%d",&n);
        int num=n*0.6;
        if(num<n*0.6) num++;
        for(int j=1; j<=n; j++)
            scanf("%lf",&p[j]),p[j]=p[j]/100;
        dp[0][0]=1;
        for(int j=1; j<=n; j++)
        dp[j][0]=dp[j-1][0]*(1-p[j]);
    
        for(int j=1; j<=n; j++)
        for(int k=1; k<=j; k++)
            dp[j][k]=dp[j-1][k-1]*p[j]+dp[j-1][k]*(1-p[j]);
        s[0]=dp[n][0];
        for(int k=1; k<=n; k++)
        s[k]=s[k-1]+dp[n][k];
    
        printf("%.5lf
    ",1-s[num-1]);
        return 0;
    }
  • 相关阅读:
    C语言经典算法100例-039-排序队列中插入新元素
    C语言经典算法100例-037-给10个数排序
    C语言经典算法100例-036-求100之内的素数
    C语言经典算法100例-032~35
    C语言经典算法100例-031-判断星期几
    安卓 短信页面设置(线性布局)
    CSS样式表
    HTML表单
    第1部分 HTML 表格
    多线程
  • 原文地址:https://www.cnblogs.com/chen9510/p/6753497.html
Copyright © 2020-2023  润新知