【HDU4405】Aeroplane chess

来源:互联网 发布:windows10装mac系统 编辑:程序博客网 时间:2024/05/29 19:18

题目链接:传送门
题解
求期望从后往前递推
f[i]表示从i>=n的期望
很容易得到f[i]=1+6j=1f[i+j],加的1是这一步的步数
实际上把>=n的都存到n里就可以了
如果点i可以飞向点j,直接f[i]=f[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;}
原创粉丝点击