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 }

 

posted @ 2012-09-30 21:22  Naix_x  阅读(131)  评论(0编辑  收藏  举报