这里有一个链接,是个人对期望的理解;
http://kicd.blog.163.com/blog/static/126961911200910168335852/
这道题看了别人的代码才知道是怎么做的,刚开始用Ei来表示第i个空格到N个空格所扔的筛子的次数,后来就不知道该怎么做了,看了别人的讲解才明白,dp[i]表示第
i个空格到N所扔的筛子的期望次数。从i个空格,可能到i+1,i+2...i+6个空格,到这六个空格的概率是1/6,所以。。。
代码如下:
#include"iostream"
#include"cstdio"
#include"queue"
#include"cstring"
#include"algorithm"
using namespace std;
const int M=1010;
const int N=100010;
int n,m;
int x[N],y[N],hash[N];
double dp[N];
int main()
{
int i,l;
while(scanf("%d%d",&n,&m),n||m)
{
memset(hash,-1,sizeof(hash));
for(i=0;i<m;i++)
{
scanf("%d%d",&x[i],&y[i]);
hash[x[i]]=y[i];
}
memset(dp,0,sizeof(dp));
for(i=n-1;i>=0;i--)
{
if(hash[i]!=-1) dp[i]=dp[hash[i]];
else
{
for(l=1;l<=6;l++) dp[i]+=dp[i+l];
dp[i]=dp[i]/6+1;
}
}
printf("%.4lf\n",dp[0]);
}
return 0;
}