博客
关于我
牛客网【每日一题】5月19日题目精讲 比赛
阅读量:145 次
发布时间:2019-02-27

本文共 1430 字,大约阅读时间需要 4 分钟。

题意是说,你在参加一场比赛,这场比赛总共有12个题。对于第i个题,你的队伍有a[i]的概率解决它。如果解决不了呢?由于所有人讨论的都很大声,所以你有b[i]的概率从左边那个队那里听会这个题的做法,有c[i]的概率从右边那个队那里听会这个题的做法。请问最终你们队伍解出0-12题的概率分别是多少?

输入描述:第一行12个数表示a[1]到a[12]第二行12个数表示b[1]到b[12]第三行12个数表示c[1]到c[12]

输出描述:输出13行,第i行表示解出i-1题的概率,保留6位小数。

解题思路:

  • 首先计算每个题做对的概率p[i]和做错的概率q[i]。q[i] = (1 - a[i]) * (1 - b[i]) * (1 - c[i]),p[i] = 1 - q[i]
  • 使用动态规划来计算解出0到12题的概率。设dp[i][j]表示前i个题中解出j个的概率。初始化dp[0][0] = 1
  • 对每个题i,从j=0到i,计算dp[i][j] = dp[i-1][j] * q[i] + dp[i-1][j-1] * p[i]
  • 最后输出dp[12][0]到dp[12][12]
  • 代码:

    #include 
    using namespace std;int main() { const int maxn = 12; double a[maxn], b[maxn], c[maxn]; double dp[maxn + 1][maxn + 1]; // 初始化 dp[0][0] = 1.0; // 读取输入 for (int i = 1; i <= maxn; ++i) { cin >> a[i]; cin >> b[i]; cin >> c[i]; } // 计算每个题的成功概率和失败概率 for (int i = 1; i <= maxn; ++i) { double q = (1 - a[i]) * (1 - b[i]) * (1 - c[i]); double p = 1 - q; dp[i][0] = dp[i-1][0] * q; for (int j = 1; j <= i; ++j) { dp[i][j] = dp[i-1][j] * q + dp[i-1][j-1] * p; } // 如果j超过i,不可能 } // 输出结果 for (int i = 0; i <= maxn; ++i) { cout << fixed << setprecision(6); if (i == 0) { cout << "0.000000"; } else { cout << dp[12][i]; } } return 0;}

    输出结果:0.0000000.0000000.0000000.0000110.0001600.0015080.0096200.0419380.1241530.2437730.3019600.2124530.064424

    转载地址:http://xmwb.baihongyu.com/

    你可能感兴趣的文章
    oracle00205报错,Oracle控制文件损坏报错场景
    查看>>
    Oracle10g EM乱码之快速解决
    查看>>
    Oracle10g下载地址--多平台下的32位和64位
    查看>>
    Oracle10g安装了11g的ODAC后,PL/SQL连接提示TNS:无法解析指定的连接标识符
    查看>>
    oracle11g dataguard物理备库搭建(关闭主库cp数据文件到备库)
    查看>>
    Oracle11G基本操作
    查看>>
    Oracle11g服务详细介绍及哪些服务是必须开启的?
    查看>>
    Oracle11g静默安装dbca,netca报错处理--直接跟换操作系统
    查看>>
    oracle12安装软件后安装数据库,然后需要自己配置监听
    查看>>
    Oracle——08PL/SQL简介,基本程序结构和语句
    查看>>
    Oracle——distinct的用法
    查看>>
    Oracle、MySQL、SQL Server架构大对比
    查看>>
    oracle下的OVER(PARTITION BY)函数介绍
    查看>>
    Oracle中DATE数据相减问题
    查看>>
    Oracle中merge into的使用
    查看>>
    oracle中sql查询上月、本月、上周、本周、昨天、今天的数据!
    查看>>
    oracle中sql的case语句运用--根据不同条件去排序!
    查看>>
    Oracle中Transate函数的使用
    查看>>
    oracle中关于日期问题的汇总!
    查看>>
    Oracle中常用的语句
    查看>>