poj 2151 Check the difficulty of problems
2014-07-31 23:04
477 查看
dp[i][j][s]表示第i个人,在前j个问题解决了s个问题
dp[i][j][s]=dp[i][j-1][s-1]*p[i][j]+dp[i][j-1][s]*(1-p[i][j]);
dp[i][j][s]=dp[i][j-1][s-1]*p[i][j]+dp[i][j-1][s]*(1-p[i][j]);
#include<iostream> #include<string> #include<cstdio> #include<vector> #include<queue> #include<stack> #include<algorithm> #include<cstring> #include<stdlib.h> #include<cmath> using namespace std; #define pb push_back double dp[1010][35][35],p[1010][35]; int main(){ int n,m,k; while(cin>>n>>m>>k&&(n+m+k)){ for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) scanf("%lf",&p[i][j]); memset(dp,0,sizeof(dp)); for(int i=1;i<=m;i++) dp[i][0][0]=1; for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ dp[i][j][0]=dp[i][j-1][0]*(1-p[i][j]); for(int s=1;s<=j;s++) dp[i][j][s]=dp[i][j-1][s-1]*p[i][j]+dp[i][j-1][s]*(1-p[i][j]); } } double tmp=1,ko=1; for(int i=1;i<=m;i++) { double tt=0; for(int j=1;j<=n;j++) tt+=dp[i] [j]; ko*=tt; } for(int i=1;i<=m;i++) { double sum=0; for(int j=1;j<k;j++) sum+=dp[i] [j]; tmp*=sum; } printf("%.3f\n",ko-tmp); } }
相关文章推荐
- POJ2151-Check the difficulty of problems
- 简单概率DP(POJ 2151 Check the difficulty of problems)
- POJ 2151 Check the difficulty of problems(概率)
- poj 2151 Check the difficulty of problems 概率DP
- Check the difficulty of problems--POJ 2151
- poj 2151 Check the difficulty of problems
- poj 2151 Check the difficulty of problems 概率dp
- POJ 2151 Check the difficulty of problems
- POJ2151-Check the difficulty of problems
- poj 2151 Check the difficulty of problems
- POJ 2151 Check the difficulty of problems
- POJ 2151 Check the difficulty of problems(概率问题)
- poj 2151 Check the difficulty of problems
- POJ 2151 Check the difficulty of problems
- POJ 2151, Check the difficulty of problems
- Poj 2151 Check the difficulty of problems (概率)
- poj 2151 Check the difficulty of problems (DP)
- poj 2151 Check the difficulty of problems
- poj 2151 Check the difficulty of problems 概率dp
- POJ 2151 Check the difficulty of problems