HDU 4405 Aeroplane chess
算法:
概率DP, dp[i] 表示到达i后还需要多少次可使游戏结束。。。
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<iostream> #include<vector> #include<string> #include<math.h> #include<map> #include<set> #include<algorithm> using namespace std; #define Pe (1.0 / 6.0) //概率DP int p[100010]; double dp[100010];//dp[i]表示到达i这个点后还要多少次可以游戏结束 int main( ) { int N, M, a, b; while( scanf("%d%d",&N,&M), N||M ) { memset(p, -1, sizeof(p)); for( int i = 0; i < M; i++) { scanf("%d%d",&a,&b); p[a] = b; } memset(dp, 0xff, sizeof(dp)); for( int i = N; i <= N + 5; i++) dp[i] = 0; for( int i = N - 1; i >= 0; i--) { double temp = 0; if( p[i] != -1 ) temp = dp[p[i]]; else {//可以到达这五个状态 for( int j = i + 1; j <= i + 6; j++) { temp += dp[j] * Pe; } temp += 1; } dp[i] = temp; } printf("%.4lf\n",dp[0]); } return 0; }
posted on 2012-09-22 21:44 more think, more gains 阅读(110) 评论(0) 编辑 收藏 举报