什么都不多说。推荐一个博客:http://kicd.blog.163.com/blog/static/126961911200910168335852/
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAX 101111
int n,m;
int flag[MAX];
double dp[MAX];
int x,y;
int main()
{
int i,j;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n+m==0) break;
memset(flag,0,sizeof(flag));
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
flag[x]=y;
}
dp[n]=dp[n+1]=dp[n+2]=dp[n+3]=dp[n+4]=dp[n+5]=dp[n+6]=0;
for(i=n-1;i>=0;i--)
{
if(flag[i])
{
dp[i]=dp[flag[i]];
}
else{
dp[i]=(dp[i+1]+dp[i+2]+dp[i+3]+dp[i+4]+dp[i+5]+dp[i+6])/6+1;
}
}
printf("%.4f\n",dp[0]);
}
return 0;
}