#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cmath>
#include <queue>
#include <set>
#define LL long long
#define FOR(i,x,y) for(int i=x;i<=y;i++)
using namespace std;
const int maxn = 100000 + 10;
double dp[maxn];
vector<int> vec[maxn];
int N , M;
int main()
{
while(scanf("%d%d", &N, &M)!=EOF)
{
if(N == 0 && M == 0)
break;
FOR(i,1,N) vec[i].clear();
FOR(i,1,M)
{
int x, y;
scanf("%d %d", &x, &y);
vec[x].push_back(y);
}
memset(dp, 0, sizeof(dp));
dp[N] = 0;
for(int i=N-1;i>=0;i--)
{
if(vec[i].size() > 0)
{
dp[i] = dp[vec[i][0]];
}
else
{
for(int x=1;x<=6;x++)
{
dp[i] += (1.0 / 6.0) * dp[i+x];
}
dp[i] += 1;
}
}
printf("%.4lf\n", dp[0]);
}
return 0;
}
HDU 4405 Aeroplane chess(概率DP)
原文地址:http://blog.csdn.net/moguxiaozhe/article/details/43487665