题意:

这道题目的意思很简单,有t个ACM队,m个题目,题目给出了每个队对每个题目做出的概率大小(0到1之间,包含0和1),要求每个队至少做出一道题(签到题),同时,要求获胜队必须至少能够做出n道题(获胜对不止一个),这到题目实际上就是一个dp+概率论知识,dp的推导也是概率论中的全概率公式推导出来的,之后就是如何利用概率论知识求解问题了。首先解释一下dp如何推导。我们令dp[i][j]为前i道题中做出j道题的概率,那么依据全概率公式,现在有两种情况:

1)第i道题做出来的,在此条件下dp[i][j]=dp[i-1][j-1]

2)第i道题没有做出来,在此条件下dp[i][j]=dp[i-1][j]

那么依据全概率公式dp[i][j]=dp[i-1][j-1]*p[i]+dp[i-1][j]*(1-p[i]),其中p[i]为第i题做出的概率。

状态转移方程确定后,那么就可以求解出前i个题目中做出j道题的概率了。

问题是所有的基本条件都已经确定了,那么题目要求解问题的概率该如何计算。这里,很容易认为每个队至少做出一道题和获胜队至少做出n道题是独立事件。其实不然。应该说他们之间存在包含于被包含的关系,这里分两种情况讨论:

我们将每个队都至少作出一道题记为事件A,获胜队至少作出n道题记为事件B,题目要求的就是p(AB)的结果

1)当n=1时,事件B包含事件A,那么p(AB)就转化为p(A),即为每个队都至少作出一道题的概率。

2)当n>1时,事件A包含事件AB,那么p(AB)就是p(A)-p(A-AB),这里补充说明一下,事件A-AB就是所有队都只作出少于n道题的概率(即作出1到n-1道题的概率)
————————————————
版权声明:本文为CSDN博主「阿杜dyh」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/i_want_to_be_a_god/article/details/25926243

 #include<cstdio>
#include<algorithm>
#include<math.h>
#include<string.h>
using namespace std;
const int maxn=1e3+;
double dp[maxn][][]; //表示第i只队伍在j道题的情况下赢k局的概率
double p[maxn][];
int main()
{
int n,t,m;
while(scanf("%d%d%d",&n,&t,&m)!=EOF){
if(!(n+t+m)) break;
for(int i=;i<t;i++)
for(int j=;j<=n;j++){
scanf("%lf",&p[i][j]);
}
memset(dp,,sizeof(dp));
for(int i=;i<t;i++){
dp[i][][]=;
for(int j=;j<=n;j++){
dp[i][j][]=dp[i][j-][]*(-p[i][j]);
for(int k=;k<=j;k++){
dp[i][j][k]=dp[i][j-][k-]*p[i][j]+dp[i][j-][k]*(-p[i][j]);
}
}
}
double ans=;
for(int i=;i<t;i++)
ans*=-dp[i][n][];
double temp=;
for(int i=;i<t;i++){
double sum=;
for(int j=;j<m;j++)
sum+=dp[i][n][j]; //计算出做出的题在1~n-1的数量的概率;
temp*=sum; //将每一个做不出的概率相乘;
}
ans-=temp; //减去不符合的情况
printf("%.3f\n",ans);
}
return ;
}

概率dp poj 2151的更多相关文章

  1. 概率dp poj 3071

    题目首先给出一个n,表示比赛一共进行n轮,那么队伍就有2^n只队伍输入一个2^n*2^n的矩阵,p[i][j]代表队伍i打败队伍j的概率dp[i][j]代表第i轮比赛的时候,队伍j赢的概率首先初始化时 ...

  2. 矩阵快速幂+概率DP poj 3744

    题意:在一条不满地雷的路上,你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的坐标范围:[1,100000000]. 每次前进p的概率前进一步,1-p的概率前进1-p步.问 ...

  3. 【POJ】2151:Check the difficulty of problems【概率DP】

    Check the difficulty of problems Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8903   ...

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

    题意:ACM比赛中,共M道题,T个队,pij表示第i队解出第j题的概率 ,求每队至少解出一题且冠军队至少解出N道题的概率. 析:概率DP,dp[i][j][k] 表示第 i 个队伍,前 j 个题,解出 ...

  5. 概率dp的边界处理 POJ 2096

    题目地址:https://vjudge.net/problem/POJ-2096 说的是有n个bug,和s个系统.现在一个人一天能发现一个bug,它可能是任何一个系统中的,也可能会发现已经发现过的bu ...

  6. poj 3071 Football(概率dp)

    id=3071">http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率 ...

  7. POJ 2096 Collecting Bugs (概率DP,求期望)

    Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material stu ...

  8. POJ 2096 Collecting Bugs (概率DP)

    题意:给定 n 类bug,和 s 个子系统,每天可以找出一个bug,求找出 n 类型的bug,并且 s 个都至少有一个的期望是多少. 析:应该是一个很简单的概率DP,dp[i][j] 表示已经从 j ...

  9. POJ 3156 - Interconnect (概率DP+hash)

    题意:给一个图,有些点之间已经连边,现在给每对点之间加边的概率是相同的,问使得整个图连通,加边条数的期望是多少. 此题可以用概率DP+并查集+hash来做. 用dp(i,j,k...)表示当前的每个联 ...

随机推荐

  1. [Python]爬取CSDN论坛 标题 2020.2.8

    首先新建一个Lei.txt 内容为: CloudComputingParentBlockchainTechnologyEnterpriseDotNETJavaWebDevelopVCVBDelphiB ...

  2. Wannafly Camp 2020 Day 5A Alternative Accounts

    There are n different accounts on the website, and some of them competed in the recent k contests. H ...

  3. clone()与clone(true)的用法

    clone() 方法生成被选元素的副本,包含子节点.文本和属性. 使用 clone(true) 方法在clone()的基础上还包括克隆元素的事件处理器.

  4. (转)R语言 SVM支持向量机在 R 语言中的实现和使用

    支持向量机是一个相对较新和较先进的机器学习技术,最初提出是为了解决二类分类问题,现在被广泛用于解决多类非线性分类问题和回归问题.继续阅读本文,你将学习到支持向量机如何工作,以及如何利用R语言实现支持向 ...

  5. 01:认识QT

    Qt: Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特 ...

  6. MapReduce异常:java.lang.ClassCastException: interface javax.xml.soap.Text

    MapReduce异常:java.lang.ClassCastException: interface javax.xml.soap.Text java.lang.ClassCastException ...

  7. java基础之 java注释

    JAVA里有2中注释风格. 一种以 "/*" 开始以 "*/" 结尾,另一种是以 "//" 起头的. 被注释的内容不会被java虚拟机编译, ...

  8. arm-linux下qt + opencv开发环境的搭建(Altera DE1 Soc)

    arm-linux-gnueabihf-gcc下载 qt下载 arm-linux下qt + opencv开发环境的搭建(Altera DE1 Soc) Ubuntu 16.04 安装QT arm嵌入式 ...

  9. go语言 实现对称加密解密算法

    package main import ( "bytes" "crypto/aes" "crypto/cipher" "crypt ...

  10. NG-ALAIN 边学边记2

    1. 下载Git上的源码  : https://github.com/ng-alain/ng-alain.git 2.解压文件: 3.进入到目录下: 4.打开CMD 切换到 E:\NgAlain\ng ...