hdu4405 Aeroplane chess(期望dp)

来源:互联网 发布:黄金投资 知乎 编辑:程序博客网 时间:2024/05/24 05:41

题意:已知起点(0)和可选步数(1,2…6),每次选择一种走法。且存在一些点之间连通,可以直达。
求第一次大于等于n的期望步数。
解法:简单的期望dp

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<set>#include<vector>#include<map>#define ll long longusing namespace std;const int maxn = 100000+10;int n,m;int vis[maxn];double dp[maxn];int main(){    while(scanf("%d%d",&n,&m)!=EOF){        if(n==0&&m==0) break;        memset(dp,0,sizeof(dp));        memset(vis,0,sizeof(vis));        for(int i=1;i<=m;i++){            int x,y; scanf("%d%d",&x,&y);            vis[x]=y;        }        for(int i=n-1;i>=0;i--){            if(vis[i]){                dp[i]=dp[vis[i]];            }            else{                double tmp=0.0;                for(int k=1;k<=6;k++){                    tmp+=dp[i+k];                }                dp[i]=tmp/6.0+1.0;            }        }        printf("%.4lf\n",dp[0]);    }    return 0;}
0 0