题目链接:传送门
题解:
求期望从后往前递推
f[i]
表示从
i
到
很容易得到
f[i]=1+∑6j=1f[i+j]
,加的
1
是这一步的步数
实际上把
如果点i可以飞向点j,直接
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=100010;
int n,m;
double f[N];
int fly[N];
int main()
{
while(~scanf("%d%d",&n,&m)&&(n||m))
{
memset(fly,0,sizeof(fly));
for(int i=1,u,v;i<=m;i++)
{
scanf("%d%d",&u,&v);
fly[u]=v;
}
f[n]=0;
for(int i=n-1;i>=0;i--)
{
if(fly[i]) f[i]=f[fly[i]];
else
{
f[i]=1;
for(int j=1;j<=6;j++)
f[i]+=(f[min(i+j,n)])/6;
}
}
printf("%.4f\n",f[0]);
}
return 0;
}