2 0 8 3 2 4 4 5 7 8 0 0
1.1667 2.3441
題意:有n個格子,擲色子的擲出的數目就是你一次到移動格數。其中有m個飛行通道可以讓你直接從第xi格
飛到第yi格。問你走到終點的期望是多少。
思路: dp[i] 表示 當前在第i格走到終點的期望。
當i不是飛行通道的起點時: dp[i] =1.0+ (dp[i+1]+dp[i+2]+dp[i+3]+dp[i+4]+dp[i+5]+dp[i+6])/6.0;
當i是飛行通道的起點時:
dp[Xi] = dp[Yi] (因為Xi可直接到Yi,並且不需要擲色子);
#include#include #include using namespace std; const int N=100050; int n,m,mark,x,y,pre[N]; double dp[N]; void input() { memset(pre,-1,sizeof(pre)); for(int i=0; i =0;i--) { if(pre[i]!=-1) dp[i]=dp[pre[i]]; else { for(int j=1;j<=6;j++) dp[i]+=dp[i+j]; dp[i]=dp[i]/6.0+1.0; } } printf("%.4lf\n",dp[0]); } int main() { while(scanf("%d %d",&n,&m)!=EOF) { if(n==0 && m==0) break; input(); solve(); } return 0; }