zoukankan      html  css  js  c++  java
  • 京东--通过考试

    小明同学要参加一场考试,考试一共有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

     

    因此,可以形成表格:
     
    这道题的基本思想就是用动态规划来解决:f(i,j)表示i道题中作对j道题中的概率。
    f(1,0),f(2,0),f(3,0),f(4,0) 可有概率知识算得,填入表中;
     
    f(1,1)=f(0,0)*Pi+f(0,1)*(1-Pi)    1道题中作对1道的概率:0道题中做对0道的概率*这道题作对的概率+0道题中做对1道的概率*这道题没作对的概率
    f(2,1)=f(1,0)*Pi+f(1,1)*(1-Pi)    2道题中作对1道的概率:1道题中做对0道的概率*这道题作对的概率+1道题中做对1道的概率*这道题没作对的概率
    f(2,2)=f(1,1)*Pi+f(1,2)*(1-Pi)    2道题中作对2道的概率:1道题中做对1道的概率*这道题作对的概率+1道题中做对2道的概率*这道题没作对的概率
      .
      .
      .
    f(4,4)=f(3,3)*Pi+f(3,4)*(1-Pi)    4道题中作对4道的概率:3道题中做对3道的概率*这道题作对的概率+3道题中做对4道的概率*这道题没作对的概率
     
      具体实现代码:
    #include <bits/stdc++.h>
    #define maxn 109
    using namespace std;
    int n,a[maxn];
    double dp[maxn][maxn];
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
    
        dp[0][0]=1;
        for(int i=1;i<=n;i++)
      { dp[i][
    0]=dp[i-1][0]*(100.0-a[i])/100; //这里就是计算i道题作对0道的概率 for(int j=1;j<=i;j++) { dp[i][j]=dp[i-1][j]*(100.0-a[i])/100+dp[i-1][j-1]*1.0*a[i]/100; } } int low=(3*n+4)/5; double ans=0; for(int i=low;i<=n;i++) { ans+=dp[n][i]; } cout.setf(ios::fixed); cout <<fixed<< setprecision(5) << ans <<endl; return 0; }

      
      
      
      
      
      
      
      
      
     
     
     
      
      
  • 相关阅读:
    波段是金牢记六大诀窍
    zk kafka mariadb scala flink integration
    Oracle 体系结构详解
    图解 Database Buffer Cache 内部原理(二)
    SQL Server 字符集介绍及修改方法演示
    SQL Server 2012 备份与还原详解
    SQL Server 2012 查询数据库中所有表的名称和行数
    SQL Server 2012 查询数据库中表格主键信息
    SQL Server 2012 查询数据库中所有表的索引信息
    图解 Database Buffer Cache 内部原理(一)
  • 原文地址:https://www.cnblogs.com/omelet/p/6713572.html
Copyright © 2011-2022 走看看