poj2151
来源:互联网 发布:主力建仓优化指标 编辑:程序博客网 时间:2024/05/18 20:46
题意大概是给出m道题,T支队,n,问求出每个人至少做出一道题而且冠军队至少做出n道题的概率。
明显概率dp问题,不知道关hash 什么事,渣渣不懂。
P[i][j]表示第I支队过第j道题的概率
F[i][j][k]表示第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]);
然后再确认一些临界调价就差不多了。
#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
#include <cstring>
#include <string>
#include <stack>
#include <stdlib.h>
using namespace std;
double p[1005][32],F[1005][32][32];
int main()
{
int m,n,t;
while(cin>>m>>t>>n)
{
if(m==0)break;
memset(p,0.0,sizeof(p));
memset(F,0.0,sizeof(F));
for(int i=1;i<=t;i++)
for(int j=1;j<=m;j++)
{
F[i][0][0]=1.0;
scanf("%lf",&p[i][j]);
}
double p1=1.0,p2=1.0;
for(int i=1;i<=t;i++)
for(int j=1;j<=m;j++)
{
F[i][j][0]=F[i][j-1][0]*(1-p[i][j]);
for(int k=1;k<=j;k++)
F[i][j][k]=F[i][j-1][k-1]*p[i][j]+F[i][j-1][k]*(1-p[i][j]);
}
for(int i=1;i<=t;i++)
p1=p1*(1-F[i][m][0]);
for(int i=1;i<=t;i++)
{
double ans=0.0;
for(int j=1;j<n;j++)//注意,这里一开始从零开始算了。。。然后wa了,是在每队至少过一题的情况下考虑冠军队过不了n题
ans+=F[i][m][j];
p2=p2*ans;
}
p1=p1-p2;
printf("%.3f\n",p1);
}
return 0;
}
- poj2151
- poj2151
- poj2151
- poj2151
- poj2151
- POJ2151
- POJ2151(DP)
- POJ2151正难则反
- poj2151 dp求概率
- poj2151(概率DP)
- poj2151之概率DP
- POJ2151 概率题
- poj2151 概率dp
- poj2151(概率dp题吧)
- poj2151概率dp
- poj2151(概率dp)
- poj2151概率入门
- poj2151 数学+概率dp
- 表单选择器
- 基于IBM Bluemix部署Java Web项目实战演练
- Drawable和Bitmap相互转换
- Android 基本知识(一)
- C++标准模板库 迭代器 iterator 详解(二)
- poj2151
- delegate
- 从零开始学C++之STL(一):STL六大组件简介
- 负数取模
- hiho刷题日记——第十三天最近公共祖先·一
- 淘宝SKU组合查询算法实现
- Metasploit 实战第2章 第二节
- 读取HashMap尤其是比较复杂结构时Entry报错
- C++STL之迭代器