hdu2151(概率dp)
来源:互联网 发布:淘宝司法拍卖有佣金吗 编辑:程序博客网 时间:2024/05/16 15:20
这题表示概率算不来,貌似这和高中没半毛钱关系,0 0. 不会算概率是硬伤。
设置状态dp[i][j][k] 前i个队在前j道题目中解除k道题的考虑
状态方程:
dp[i][j][k] = dp[i][j - 1][k - 1] * p[i][j] + dp[i][j - 1][k] * (1.0 - p[i][j]);
设置是s[i][j] 表示第i队做出j道题的概率
终于知道这个概率怎么求了,独立概率。
注意这题的初始化。
#include<iostream>#include<math.h>#include<stdio.h>#include<algorithm>#include<string.h>#include<vector>using namespace std;//typedef __int64 lld;#define oo 0x3f3f3f3f#define Mod 1000000007#define maxn 1010#define maxm 50double dp[maxn][maxm][maxm];//第i个队伍在前j道题目中做出k道的概率double p[maxn][maxm];double s[maxn][maxm];int main(){ int T,M,N; while(scanf("%d %d %d",&M,&T,&N)!=EOF) { if(T==0&&M==0&&N==0)break; for(int i=1;i<=T;i++) { for(int j=1;j<=M;j++) scanf("%lf",&p[i][j]); } memset(dp,0,sizeof dp); memset(s,0,sizeof s); //dp转移 for(int i=1;i<=T;i++) { dp[i][0][0]=1.0; for(int j=1;j<=M;j++) dp[i][j][0]=dp[i][j-1][0]*(1.0-p[i][j]); for(int j=1;j<=M;j++) for(int k=1;k<=j;k++) dp[i][j][k]=dp[i][j-1][k-1]*p[i][j]+dp[i][j-1][k]*(1.0-p[i][j]); } //计算每个队伍分别做出几题的概率 for(int i=1;i<=T;i++) { s[i][0]=dp[i][M][0]; for(int j=1;j<=M;j++) s[i][j]=s[i][j-1]+dp[i][M][j]; } //计算每个队至少做出一题,并且冠军至少做出N题的概率 double p1=1.0,p2=1.0; for(int i=1;i<=T;i++) { p1*=(1-s[i][0]);//每个队伍至少做出一题 p2*=(s[i][N-1]-s[i][0]);//每个队伍至多做出N-1题 } printf("%.3lf\n",p1-p2); } return 0;}
0 0
- hdu2151(概率dp)
- HDU2151 【DP】
- hdu2151 Worm DP
- HDU2151:Worm(简单dp)
- hdu2151
- HDU2151
- hdu2151
- HDU2151
- 概率dp
- ##概率dp##
- 概率dp
- 概率dp
- 概率dp
- 概率dp
- 概率dp
- 概率dp
- 概率dp
- 概率dp
- jdk安装会提示安装jdk和jre
- 设计模式之桥接模式
- hdu3853(简单概率dp)
- 【错误录】System.UnauthorizedAccessException: 对路径的访问被拒绝?
- LeetCode: Binary Tree Postorder Traversal
- hdu2151(概率dp)
- Strut2错误处理<init>
- VIM使用技巧及快捷操作
- 从零开始学习Gradle之一---初识Gradle
- HDOJ 5100 Chessboard 构造
- ibm stor 学习
- Unity3D学习之(多态和索引器)
- ubuntu 12.04安装配置samba
- 人活着系列之开会(最短路_floyd)