Check the difficulty of problems
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 5009   Accepted: 2206

Description

Organizing a programming contest is not an easy job. To avoid making the problems too difficult, the organizer usually expect the contest result satisfy the following two terms: 

1. All of the teams solve at least one problem. 

2. The champion (One of those teams that solve the most problems) solves at least a certain number of problems. 



Now the organizer has studied out the contest problems, and through the result of preliminary contest, the organizer can estimate the probability that a certain team can successfully solve a certain problem. 



Given the number of contest problems M, the number of teams T, and the number of problems N that the organizer expect the champion solve at least. We also assume that team i solves problem j with the probability Pij (1 <= i <= T, 1<= j <= M). Well, can you
calculate the probability that all of the teams solve at least one problem, and at the same time the champion team solves at least N problems? 

Input

The input consists of several test cases. The first line of each test case contains three integers M (0 < M <= 30), T (1 < T <= 1000) and N (0 < N <= M). Each of the following T lines contains M floating-point numbers in the range
of [0,1]. In these T lines, the j-th number in the i-th line is just Pij. A test case of M = T = N = 0 indicates the end of input, and should not be processed.

Output

For each test case, please output the answer in a separate line. The result should be rounded to three digits after the decimal point.

Sample Input

2 2 2
0.9 0.9
1 0.9
0 0 0

Sample Output

0.972

题目:给出m个题,t个队伍,和每一个队伍做对每一个题的概率,问每一个队都做出题目,且有做对n或n以上题目的队的概率是多少?

转化。问题能够转化为:每一个队都做出1题或1题以上的概率 - 每一个队都做出1题到n-1题内的概率。

求每一个队做对k个题的概率。

dp[i][j][k]表示第i个队在前j个题目中做对k个的概率。

首先dp[i][0][0] = 1.0 , 求解出dp[i][m][k]得到我们要求的概率

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
double dp[1005][32][32] ;
double p[1005][32] , p1 , p2 , temp ; int main()
{
int i , j , k , m , n , t ;
while(scanf("%d %d %d", &m, &t, &n) && m+t+n != 0)
{
for(i = 1 ; i <= t ; i++)
for(j = 1 ; j <= m ; j++)
scanf("%lf", &p[i][j]);
memset(dp,0,sizeof(dp));
for(i = 1 ; i <= t ; i++)
{
dp[i][0][0] = 1.0 ;
for(j = 1 ; j <= m ; j++)
{
for(k = 0 ; k <= j ; k++)
{
if( k != 0 )
dp[i][j][k] += dp[i][j-1][k-1] * p[i][j] ;
if( k != j )
dp[i][j][k] += dp[i][j-1][k] * ( 1.0 - p[i][j] ) ;
//printf("%.2lf ", dp[i][j][k]) ;
}
//printf("\n");
}
//printf("**\n");
}
p1 = p2 = 1.0 ;
for(i = 1 ; i <= t ; i++)
{
p1 *= ( 1.0 - dp[i][m][0] ) ;
temp = 0.0 ;
for(k = 1 ; k < n ; k++)
temp += dp[i][m][k] ;
p2 *= temp ;
}
printf("%.3lf\n", p1-p2);
}
return 0;
}

poj2151--Check the difficulty of problems(概率dp第四弹,复杂的计算)的更多相关文章

  1. [POJ2151]Check the difficulty of problems (概率dp)

    题目链接:http://poj.org/problem?id=2151 题目大意:有M个题目,T支队伍,第i个队伍做出第j个题目的概率为Pij,问每个队伍都至少做出1个题并且至少有一个队伍做出N题的概 ...

  2. [poj2151]Check the difficulty of problems概率dp

    解题关键:主要就是概率的推导以及至少的转化,至少的转化是需要有前提条件的. 转移方程:$dp[i][j][k] = dp[i][j - 1][k - 1]*p + dp[i][j - 1][k]*(1 ...

  3. POJ 2151 Check the difficulty of problems 概率dp+01背包

    题目链接: http://poj.org/problem?id=2151 Check the difficulty of problems Time Limit: 2000MSMemory Limit ...

  4. [ACM] POJ 2151 Check the difficulty of problems (概率+DP)

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

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

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

  6. POJ2157 Check the difficulty of problems 概率DP

    http://poj.org/problem?id=2151   题意 :t个队伍m道题,i队写对j题的概率为pij.冠军是解题数超过n的解题数最多的队伍之一,求满足有冠军且其他队伍解题数都大于等于1 ...

  7. POJ2151Check the difficulty of problems 概率DP

    概率DP,还是有点恶心的哈,这道题目真是绕,问你T个队伍.m个题目.每一个队伍做出哪道题的概率都给了.冠军队伍至少也解除n道题目,全部队伍都要出题,问你概率为多少? 一開始感觉是个二维的,然后推啊推啊 ...

  8. POJ-2151 Check the difficulty of problems---概率DP好题

    题目链接: https://vjudge.net/problem/POJ-2151 题目大意: ACM比赛中,共M道题,T个队,pij表示第i队解出第j题的概率 问 每队至少解出一题且冠军队至少解出N ...

  9. poj 2151Check the difficulty of problems<概率DP>

    链接:http://poj.org/problem?id=2151 题意:一场比赛有 T 支队伍,共 M 道题, 给出每支队伍能解出各题的概率~  求 :冠军至少做出 N 题且每队至少做出一题的概率~ ...

随机推荐

  1. postgresql 内存分配

    postgresql的内存分配主要由shared_buffers.temp_buffers.work_mem.maintenance_work_mem参数控制. shared_buffers又可以叫做 ...

  2. Linux History安全问题【保存记录防止删除】+完善Linux/UNIX审计 将每个shell命令记入日志

    2011-09-27 22:11:51|  分类: rhel5_033|举报|字号 订阅       Linux利用PROMPT_COMMAND实现审计功能 这个系统审计,记录什么用户,在什么时间,做 ...

  3. IN 查询时出现ORA-01795:列表中的最大表达式数为1000解决方法

    问题描写叙述: SQL进行IN查询时出现:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000 解决的方法: 问题原因是:SQL进行IN查询时.IN中的 ...

  4. ZH奶酪:在博客中添加Latex公式

    1. 点击编辑器中的插入图片: 2.在URL输入下边的地址: http://latex.codecogs.com/gif.latex?你的latex代码 就可以了-

  5. The Web Sessions List

    The Web Sessions list contains the list of HTTP Requests that are sent by your computer. You can res ...

  6. 2019年所有人必须要掌握的一个技能 - “AI思维”

    或许很多人认为AI只是那些直接从事AI相关岗位的人必须要掌握的技能,但实际上,不分岗位所有人都需要一种能力,那就是“AI思维”.如果没能在合适的时机把自己的认知提升到一定程度,被替代是很自然的事情.在 ...

  7. ORA-14300: 分区关键字映射到超出允许的最大分区数的分区

    环境为:Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production 对象表为按天的自动分区表: PARTI ...

  8. MariaDB初始化和启动故障

    初始化故障排查 1. so依赖缺失 比如报这样的错误: ./bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot ...

  9. python之函数用法file()

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法file() #file() #说明:file()内建函数它的功能等于open(),但 ...

  10. 捕获Chrome浏览器全屏退出事件

    参考地址 document.addEventListener("fullscreenchange", function(e) { console.log("fullscr ...