分析:
dp[i]表示走到第i(0....n)个grid时所走的步数。
根据 简述期望问题的解法来推就行了。
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int hash[100010];
double dp[100010];
int main()
{
int n,m,x,y;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0 && m==0)
break;
memset(hash,-1,sizeof(hash));
for(int i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
hash[x]=y;
}
memset(dp,0,sizeof(dp));
for(int i=n-1;i>=0;i--)
{
if(hash[i]!=-1)
dp[i]=dp[hash[i]];
else
{
for(int j=1;j<=6;j++)
dp[i]+=dp[i+j];
dp[i]=dp[i]/6+1;
}
}
printf("%.4lf\n",dp[0]);
}
return 0;
}