HDU 4405 Aeroplane chess(概率DP求期望)

来源:互联网 发布:tomcat是java开发的吗 编辑:程序博客网 时间:2024/05/17 20:32

题意:

给出0~N的飞行棋盘, 有M个快速滑道,会从起点到终点滑动,询问从0到n后的最少步数

思路:

期望题。。。从后往前推,这题好像很好推。

#include <iostream>#include <stdlib.h>#include <string.h>#include <stdio.h>#include <queue>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;const int maxn=100005;double dp[maxn];vector<int>vec[maxn];int vis[maxn];int main(){    int n,m;    while(scanf("%d%d",&n,&m)!=EOF){            if(n==0&&m==0) break;        int x,y;        for(int i=0;i<=n;i++)        vec[i].clear();        for(int i=1;i<=m;i++)        {            scanf("%d%d",&x,&y);            if(x>y)                swap(x,y);            vec[y].push_back(x);        }        memset(dp,0,sizeof(dp));        memset(vis,0,sizeof(vis));        dp[0]=0;        for(int i=0;i<vec[n].size();i++)        {            int v=vec[n][i];            dp[v]=0;            vis[v]=1;        }        for(int i=n-1;i>=0;i--)        {            if(vis[i]==0)            {                for(int k=1;k<=6;k++)                    dp[i]+=dp[k+i]/6;                dp[i]++;             }            for(int j=0;j<vec[i].size();j++)            {                int v=vec[i][j];                vis[v]=1;                dp[v]=dp[i];            }        }        printf("%.4lf\n",dp[0]);    }}


阅读全文
0 0
原创粉丝点击