Hdu 4405 期望DP 题解

来源:互联网 发布:javascript 改变class 编辑:程序博客网 时间:2024/05/29 09:58

题目传送门

在这里%ZBW大佬


显然这道题看起来很水,虽然对于我这种菜来说也不是特别的水,显然如果可以直接飞过去的话那么dp[i]=dp[j] ( i 可以直接飞到 j )
既然是做期望DP题,我们一般倒推,这道题也是可以倒推的,我们推到一个数,如果可以跳转的话,我们就直接跳转赋DP值,如果不行的话我们就枚举6种情况,然后去从dp[i+j]*P[转移]转移过来,其中j的取值范围是1到6,显然这样就可以了,最后输出dp[0]表示现在在第一个位置,然后赢得平均期望次数是多少就可以了


#include<iostream>#include<cstdio>#include<cstring>double dp[100005];int vis[100005],from,to;int main(){    int n,m;    while(scanf("%d%d",&n,&m)!=EOF&&(!(n==0&&m==0))){        memset(vis,-1,sizeof(vis));        for(register int i=1;i<=m;i++){            scanf("%d%d",&from,&to);vis[from]=to;        }        memset(dp,0,sizeof(dp));        for(register int i=n-1;i>=0;i--){            if(vis[i]!=-1) dp[i]=dp[vis[i]];            else{                for(register int j=1;j<=6;j++) dp[i]+=dp[i+j]/6.0;                dp[i]+=1;            }        }        printf("%.4lf\n",dp[0]);    }    return 0;} 

这里写图片描述

原创粉丝点击