-
D - Aeroplane chess
- HDU - 4405
- 题意:在一条有n个格点的线上掷骰子,有1-6六个值,如果当前为止超过n,则胜利,有m个跳跃点,到x位置可以直接飞到y位置(x < y),问从起点开始到终点掷骰子的期望数。
- 思路:逆向期望DP即可。有边的期望直接传递没有的按照1/6的概率传递。
-
#include<iostream> #include<cstring> #include<stdio.h> using namespace std; #define maxn 100005 int n,m,mmp[maxn],x,y; double dp[maxn],p=1.0/6.0; int main() { while(~scanf("%d%d",&n,&m)) { if(n+m==0)break; memset(mmp,-1,sizeof(mmp)); while(m--) { scanf("%d%d",&x,&y); mmp[x]=y; } memset(dp,0,sizeof(dp)); for(int i=n-1; i>=0; i--) { if(mmp[i]!=-1) dp[i]=dp[mmp[i]]; else dp[i]=p*(dp[i+1]+dp[i+2]+dp[i+3]+dp[i+4]+dp[i+5]+dp[i+6])+1.0; } printf("%.4lf\n",dp[0]); } return 0; }
D - Aeroplane chess HDU - 期望DP
最新推荐文章于 2021-03-14 21:19:43 发布