poj 2151 Check the difficulty of problems 概率DP

简单的概率DP!!!

结果=所以的情况-所以满足且<=n-1的情况!

代码如下:

 

 1 #include<iostream>

 2 #include<stdio.h>

 3 #include<algorithm>

 4 #include<iomanip>

 5 #include<cmath>

 6 #include<cstring>

 7 #include<vector>

 8 #define ll __int64

 9 #define pi acos(-1.0)

10 #define MAX 1001

11 using namespace std;

12 double p[MAX][32],dp[50][32],s[MAX][32],p1,p2;

13 int main(){

14     int n,m,t,i,j,k;

15     while(cin>>m>>t>>n){

16         if(m==0&&t==0&&n==0) break;

17         for(i=1;i<=t;i++)

18             for(j=1;j<=m;j++)

19                 cin>>p[i][j];

20         for(i=1;i<=t;i++){

21             dp[0][0]=1;

22             for(j=1;j<=m;j++) dp[j][0]=dp[j-1][0]*(1-p[i][j]);

23             for(j=1;j<=m;j++)

24                 for(k=1;k<=j;k++){

25                     dp[j][k]=dp[j-1][k-1]*p[i][j]+dp[j-1][k]*(1-p[i][j]);

26                 }

27             s[i][0]=dp[m][0];

28             for(j=1;j<=m;j++) s[i][j]=s[i][j-1]+dp[m][j];

29         }

30         p1=p2=1;

31         for(i=1;i<=t;i++){

32             p1*=(1-s[i][0]);

33             p2*=(s[i][n-1]-s[i][0]);

34         }

35         printf("%.3lf\n",p1-p2);

36     }

37     return 0;

38 }
View Code

 

 

 

你可能感兴趣的:(check)