hdu 4405 Aeroplane chess(概率dp1)

来源:互联网 发布:杭州知奥贸易有限公司 编辑:程序博客网 时间:2024/06/06 09:47

题目链接点击打开链接

题目大意:如同飞行棋的玩法,问到达终点的期望步数

题目分析:终于明白为什么要由后往前写了= =,如果没有飞行机会那么进行1~6的推算dp【i】=dp【i+j】/6


详见代码~~

#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#include<cmath>using namespace std;double dp[100010];int fly[100010];void init(int n){    int i;    for(i=0;i<=n;i++)    {        fly[i]=-1;dp[i]=0;    }}int main(){    int n,m,a,b,flag;    while(~scanf("%d %d",&n,&m)&&(n!=0||m!=0))    {       init(n);       for(int i=0;i<m;i++)       {           scanf("%d %d",&a,&b);           fly[a]=b;       }       for(int i=n-1;i>=0;i--)       {           if(fly[i]!=-1)               dp[i]=dp[fly[i]];           else           {               for(int j=1;j<=6;j++)                  if(i+j>=n) dp[i]+=dp[n]/6;                  else dp[i]+=dp[i+j]/6;                dp[i]+=1;           }       }       printf("%.4lf\n",dp[0]);    }    return 0;}


原创粉丝点击