poj2151 dp求概率
来源:互联网 发布:炫酷黑客收徒网站源码 编辑:程序博客网 时间:2024/05/21 17:44
题意:有T个人参加比赛,共有M道题,第 i 个人通过第 j 题的概率为 p[i][j]
求:所有人都至少做出一道题,而且第一名至少做出N道,求这个结果的概率
分析:可以知道,每个人自己是互不影响的 对于一个选手 i 前 j 道题,做出 k 道题的概率F[i][j][k] = F[i][j - 1][k - 1] * p[i][j] + F[i][j - 1][k] * (1 - p[i][j])
那么问题可以转化为:所有至少做出一道的概率(p1) - 所有选手做出的题数n >= 1 && n < N 的概率(p2)
设s[i][j]表示F[i][M][0] + F[i][M][1] + ... + F[i][M][j]
P1 = (s[1][M] - s[1][0])*(s[2][M]-s[2][0])*...*(s[T][M]-s[T][0])
P2 = (s[1][N-1] - s[1][0])*(s[2][N-1]-s[2][0])*...*(s[T][N-1]-s[T][0])
P2 = (s[1][N-1] - s[1][0])*(s[2][N-1]-s[2][0])*...*(s[T][N-1]-s[T][0])
以上内容摘自博客 http://www.cnblogs.com/ylfdrib/archive/2010/12/03/1895811.html
我的代码:
#include <iostream>#include <cstdio>using namespace std;float p[1003][33], dp[1003][33][33];float DP(int m, int t, int n){ int i, j, k; //初始化第一道题没做对和做对时的概率 for (i = 1; i <= t; i++) { dp[i][1][0] = 1 - p[i][1]; dp[i][1][1] = p[i][1]; } //初始化前k道题一道题都没做对的概率 for (i = 1; i <= t; i++) for (j = 2; j <= m; j++) dp[i][j][0] = dp[i][j-1][0] * (1 - p[i][j]); //dp求第i队前j道做对k道的概率 for (i = 1; i <= t; i++) for (j = 2; j <= m; j++) for (k = 1; k <= j; k++) { if (k < j) dp[i][j][k] = dp[i][j-1][k-1] * p[i][j] + dp[i][j-1][k] * (1 - p[i][j]); else dp[i][j][k] = dp[i][j-1][k-1] * p[i][j]; } float p1 = 1, p2 = 1, tmp; //求p1,即所有队都至少做一题的概率 for (i = 1; i <= t; i++) p1 *= (1 - dp[i][m][0]); //求p2,即所有队伍都做x(1 <= x < n)道的概率。 for (i = 1; i <= t; i++) { tmp = 0; for (j = 1; j < n; j++) tmp += dp[i][m][j]; p2 *= tmp; } return p1 - p2; }int main(){ int m, t, n, i, j; while (scanf ("%d%d%d", &m, &t, &n)) { if (!m && !t && !n) break; for (i = 1; i <= t; i++) for (j = 1; j <= m; j++) scanf ("%f", &p[i][j]); printf ("%.3f\n", DP(m, t, n)); } return 0;}
- poj2151 dp求概率
- poj2151(概率DP)
- poj2151之概率DP
- poj2151 概率dp
- poj2151(概率dp题吧)
- poj2151概率dp
- poj2151(概率dp)
- poj2151 数学+概率dp
- [POJ2151]check the difficulty-概率DP
- POJ2151(DP)
- POJ2151 Check the difficulty of problems 概率+DP
- POJ2151:Check the difficulty of problems(概率DP)
- POJ2151-Check the difficulty of problems(概率DP)
- POJ2151----Check the difficulty of problems(概率dp)
- 概率dp入门[HDU5001][POJ2151][POJ3071][HDU3853][POJ2096]
- POJ2151- Check the difficulty of problems(概率DP)
- poj2151 Check the difficulty of problems(概率dp)
- (POJ2151)Check the difficulty of problems <概率DP>
- 关于用户体验的一点看法
- OCH\OMS\OTS\MSP\RS\SPI解释
- STL SGI内存的管理
- Struts1学习笔记(1)-----MVC设计模式
- 再谈用户体验
- poj2151 dp求概率
- 知识点索引
- NIO双线程处理服务器原型完整源代码(续)
- SP合作管理办法(暂行)
- 编程语言新宠儿——Julia诞生记
- C#参数传递时到底发生了什么(ref)
- Oracle存储过程传递数组参数
- linux 开始之路
- 我是学生也是菜鸟但是我渴望成为一个编程高手