Check the difficulty of problems

POJ - 2151

大致题意:

m个问题,t个队伍,要求冠军队伍至少解决n个问题,给出每个队伍解决每个问题的概率

求每一个队至少解决一个问题且冠军队伍至少解决n个问题的概率


解题思路:

概率dp求概率问题一般是正推

状态表示:f[i][j][k] 表示第i个队伍在前j个问题中,解决k个问题的概率

-------------p[i][j]表示第i个队伍解决第j个问题的概率

-------------dp[i][k] 表示第i个队伍,解决的问题数小于等于k的概率

分析: 1.初始化 f[i][0][0]=1 ,预处理出f[i][j][0]

--------2.f[i][j][k]有两种转移状态:

----------------在前j-1个问题中,解决k-1个问题 概率:p[i][j]

----------------在前j-1个问题中,解决k个问题 概率:1-p[i][j]

--------得出转移方程: f[i][j][k]= p[i][j]*f[i][j-1][k-1]+(1-p[i][j])*f[i][j-1][k]

--------3.dp[i][k] 表示第i个队伍,解决的问题数小于等于k的概率

--------得出dp[i][k]的转移方程: dp[i][k]=f[i][m][0]+f[i][m][1]+…+f[i][m][k]

--------4.设两个变量 p1,p2 p1表示每个队至少解决一个问题的概率 p2表示每个队解决的问题在1~(n-1)的概率

--------即p1=(1-dp[1][0])*(1-dp[2][0])*…*(1-dp[t][0])

--------p2=(dp[1][n-1]-dp[1][0])*(dp[2][n-1]-dp[2][0])*…*(dp[t][n-1]-dp[t][0])

--------5.根据容斥原理 答案为 p1-p2

补充:因为精度问题,可能G++ WA, C++ AC


AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define rep(i, n) for (int i = 1; i <= (n); ++i)
#define debug(a) cout << #a << " = " << a << endl;
using namespace std;
typedef long long ll;
const int N = 1010;
int n, m, t;
double f[N][50][50]; //表示第i个队伍在前j个问题中,解决k个问题的概率
double p[N][50]; //第i个队伍解决第j个问题的概率
double dp[N][50]; //表示第i个队伍,解决的问题数小于等于k的概率
int main(void)
{while (scanf("%d%d%d", &m, &t, &n), m + t + n) { //问题数量 队伍数量 冠军至少题数for (int i = 1; i <= t; ++i)for (int j = 1; j <= m; ++j)scanf("%lf", &p[i][j]);for (int i = 1; i <= t; ++i) {f[i][0][0] = 1;for (int j = 1; j <= m; ++j)f[i][j][0] = f[i][j - 1][0] * (1 - p[i][j]);for (int j = 1; j <= m; ++j)for (int k = 1; k <= j; ++k)f[i][j][k] = p[i][j] * f[i][j - 1][k - 1] + (1 - p[i][j]) * f[i][j - 1][k];dp[i][0] = f[i][m][0];for (int k = 1; k <= m; ++k)dp[i][k] = dp[i][k - 1] + f[i][m][k];}double p1 = 1, p2 = 1; // p1表示每个队至少解决一个问题  p2表示每个队解决的问题在1-(n-1)for (int i = 1; i <= t; ++i) {p1 *= (1 - dp[i][0]);p2 *= (dp[i][n - 1] - dp[i][0]);}//容斥原理printf("%.3lf\n", p1 - p2);}return 0;
}

Check the difficulty of problems (概率dp求概率)相关推荐

  1. HDU-4089 Activation (概率DP求概率)

    题目大意:一款新游戏注册账号时,有n个用户在排队.每处理一个用户的信息时,可能会出现下面四种情况: 1.处理失败,重新处理,处理信息仍然在队头,发生的概率为p1: 2.处理错误,处理信息到队尾重新排队 ...

  2. 【POJ - 2151】Check the difficulty of problems(概率dp)

    ​​​​题干: Organizing a programming contest is not an easy job. To avoid making the problems too diffic ...

  3. Check the difficulty of problems - poj 2151 (概率+DP)

    有 T(1<T<=1000) 支队伍和 M(0<M<=30) 个题目,已知每支队伍 i 解决每道题目 j 的的概率 p[i][j],现在问:每支队伍至少解决一道题,且解题最多的 ...

  4. POJ 2151 Check the difficulty of problems (概率dp)

    题意:给出m.t.n,接着给出t行m列,表示第i个队伍解决第j题的概率. 现在让你求:每个队伍都至少解出1题,且解出题目最多的队伍至少要解出n道题的概率是多少? 思路:求补集. 即所有队伍都解出题目的 ...

  5. POJ-2151 Check the difficulty of problems 概率DP

    题目链接:http://poj.org/problem?id=2151 组合数做肯定超时,容易看出是DP.f[i][j]表示某个队的前j个题目做出i个题目的概率,则f[i][j]=f[i][j-1]* ...

  6. [POJ2151]Check the difficulty of problems(概率DP)

    传送门 每个队之间是独立的 f[i][j]表示当前队伍前i个题答对j个的概率 满足条件的概率 == 全部方案(除去答对0)的概率 - 不满足条件的概率(每个队伍答对1~n-1) #include &l ...

  7. P2473 奖励关 状压概率DP求期望

    题目链接 https://www.luogu.com.cn/problem/P2473 题意 n轮,m种球,每轮随即一个球,可以接可以不接,接的话需要满足这个球的前置条件(比如3号球接球必须已经接过1 ...

  8. poj 2151 Check the difficulty of problems

    题意:有m到题,t个队伍,给出第 i 支队作出 第 j 道题的概率 Pij.求每个队至少作出一道题,作出最多的那个队伍至少作出 n 道题的概率. dp[i][j][k]表示第 i 支队前 j 道题作出 ...

  9. HDU4405(概率DP求期望)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4405 题意:飞行棋,从0到n,置骰子,置到几就往前走几步,前进中会有捷径,比如2和5连到一起了,那你走到2 ...

最新文章

  1. linux flatpak 简介 同一个应用在不同linux发行版运行
  2. python怎么获取时间_Python:如何从datetime.timedelta对象中获取时间?
  3. OSPF——多区域概念及配置、ABR简介、ASBR简介、路由重分发
  4. 重磅 | 《机器学习综述》算法分类及特征工程手写笔记
  5. boost/container/small_vector.hpp: No such file or directory on Ubuntu 14.04
  6. UVA10359 Tiling【大数+递推】
  7. 应用编辑器保存的htnl代码怎么正常显示在页面上
  8. kubernetes滚动更新
  9. 举办了一个如何对外协作的讲座,4人到场
  10. 移动硬盘提示文件或目录损坏且无法读取怎么办
  11. 平台型组织——数字化时代的组织智商鉴定器
  12. flvjs is not defined
  13. 汽车驱动桥毕业设计【毕业设计(论文) +7张CAD图纸】
  14. V1.10 Research as a career
  15. SystemVerilog学习笔记(可综合的部分)(一)
  16. 网上搜索电子书的办法
  17. 机器学习笔记 - 加速神经网络训练的 7 个技巧
  18. Mybatis if test中字符串比较和Mybatis的like查询
  19. 软件测试需求频繁变更,测试中如何应对需求变更问题
  20. 2、自写VBA函数2<高德测距>用VB网抓高德地图货车导航距离

热门文章

  1. 分布式数据库缓存的基本概念?MemCache和redis的详细比较?
  2. 数据挖掘之关联规则算法Apriori
  3. 华三魔术家H3C Magic R200无线路由器发布 全智能加持甘作大户型网络“小透明
  4. wap的全面解析!!
  5. 基于python爬虫与数据分析系统设计
  6. Ketcher基本使用和用SMILES字符串生成键线式矢量图
  7. LeetCode 799. 香槟塔(DP动态规划)
  8. 如何使用$once函数
  9. ESP8266模块无限重启崩溃的问题
  10. vtkImageViewer2实现彩色图与灰度图叠加显示