POJ 2096 Collecting Bugs(期望DP)

题目链接

和那天网络赛很相似,倒着推,这是二维的情况。注意提交别用G++,真坑啊。

 1 #include <iostream>

 2 #include <cstdio>

 3 #include <cstring>

 4 #include <cmath>

 5 #define eps 1e-9

 6 using namespace std;

 7 double p[1005][1005];

 8 int main()

 9 {

10     int n,m,i,j;

11     while(scanf("%d%d",&n,&m)!=EOF)

12     {

13         memset(p,0,sizeof(p));

14         for(i = n-1; i >= 0; i --)

15         {

16             p[i][m] = p[i+1][m] + n*1.0/(n-i);

17         }

18         for(i = m-1; i >= 0; i --)

19         {

20             p[n][i] = p[n][i+1] + m*1.0/(m-i);

21         }

22         for(i = n-1; i >= 0; i --)

23         {

24             for(j = m-1; j >= 0; j --)

25             {

26                 p[i][j] = (1.0/(n*m-i*j))*((n-i)*j*p[i+1][j]+(n-i)*(m-j)*p[i+1][j+1]+i*(m-j)*p[i][j+1]+n*m);

27             }

28         }

29         /*for(i = n;i >= 0;i --)

30         {

31             for(j = m;j >= 0;j --)

32             printf("%.2lf ",p[i][j]);

33             printf("\n");

34         }*/

35         printf("%.4lf\n",p[0][0]+eps);

36     }

37     return 0;

38 }

 

你可能感兴趣的:(bugs)