hdu4405 Aeroplane chess 【期望dp】

来源:互联网 发布:淘宝卖家在哪充值金币 编辑:程序博客网 时间:2024/05/24 06:18

解题思路:

貌似题意是有捷径就走捷径。
那就是裸的期望dp了。
设dp[i]为当前所处位置到目标状态的期望,则当in,dp[i]=0。
转移方程为:
有捷径:dp[i]=dp[to[i]]
没有捷径:dp[i]=dp[i+j]6+11j6
最后dp[0]即为答案。

#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<vector>#include<queue>#define ll long longusing namespace std;int getint(){    int i=0,f=1;char c;    for(c=getchar();(c<'0'||c>'9')&&c!='-';c=getchar());    if(c=='-')f=-1,c=getchar();    for(;c>='0'&&c<='9';c=getchar())i=(i<<3)+(i<<1)+c-'0';    return i*f;}const int N=100005;int n,m,to[N];double dp[N];int main(){    //freopen("lx.in","r",stdin);    int x,y;    while(n=getint())    {        memset(dp,0,sizeof(dp));        memset(to,0,sizeof(to));        if(!n)break;        m=getint();        while(m--)        {            x=getint(),y=getint();            to[x]=y;        }        for(int i=n-1;i>=0;i--)        {            if(to[i])dp[i]=dp[to[i]];            else            {                for(int j=1;j<=6;j++)                    dp[i]+=dp[i+j];                dp[i]=dp[i]*1.0/6+1;            }        }        printf("%.4lf\n",dp[0]);    }    return 0;}
原创粉丝点击