题目链接:传送门
题解:
求期望从后往前递推
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;
}