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 }