HDU 4405 Aeroplane chess(期望DP)

题目链接

理解了过程就是个水题,收拾东西回家。

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 using namespace std;
 5 #define N 100000
 6 double dp[N+1];
 7 int p[N+1];
 8 int main()
 9 {
10     int i,j,n,m,sv,ev;
11     while(scanf("%d%d",&n,&m)!=EOF)
12     {
13         if(!n&&!m) break;
14         memset(dp,0,sizeof(dp));
15         memset(p,0,sizeof(p));
16         for(i = 1;i <= m;i ++)
17         {
18             scanf("%d%d",&sv,&ev);
19             p[sv] = ev;
20         }
21         for(i = n-1;i >= 0;i --)
22         {
23             if(p[i])
24             {
25                 dp[i] = dp[p[i]];
26             }
27             else
28             {
29                 for(j = 1;j <= 6&&i+j<=n;j ++)
30                 {
31                     dp[i] += dp[i+j]/6;
32                 }
33                 dp[i] += 1;
34             }
35         }
36         printf("%.4lf\n",dp[0]);
37     }
38     return 0;
39 }
posted @ 2012-09-28 17:10  Naix_x  阅读(136)  评论(0编辑  收藏  举报