您的位置:首页 > 其它

poj2151概率dp

2016-02-28 17:02 323 查看
题目大意:m道题,t个队伍,n个最少题数,给出t*m的概率,表示队伍做出题的概率。求所有队伍都至少出1题,且至少有一个队伍出n道题以上概率。

参考:点击打开链接

代码:
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <iomanip>

using namespace std;
//#pragma comment(linker, "/STACK:102400000,102400000")
#define maxn 70
#define MOD 1000000007
#define mem(a , b) memset(a , b , sizeof(a))
#define LL long long
#define INF 100000000
int m , n , t;
double dp[35][35];
double sum[3];

int main()
{
double p;
while(scanf("%d %d %d" , &m , &t , &n) != EOF && (m || n || t))
{
double ans1 = 1.0 , ans2 = 1.0;
for(int i = 0 ; i < t ; i ++)
{
dp[0][0] = 1;
for(int j = 1 ; j <= m ; j ++)
{
scanf("%lf" , &p);
for(int k = 0 ; k <= j && k<= m ; k ++)
dp[k][j] = dp[k][j-1]*(1-p) + (k?dp[k-1][j-1]*p:0);
}
sum[0] = dp[0][m];
sum[1] = 0.0;
for(int j = 1 ; j < n ; j ++) sum[1] += dp[j][m];
ans1 *= (1-sum[0]);
ans2 *= sum[1];
}
printf("%.3lf\n" , ans1 - ans2);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: