题意:某人掷骰子,数轴上前进相应的步数,会有瞬移的情况,求从0到N所需要的期望投掷次数。
解题关键:期望dp的套路解法,一个状态可以转化为6个状态,则该状态的期望,可以由6个状态转化而来。再加上两个状态的消耗即可。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cstdlib> 5 #include<cmath> 6 #include<iostream> 7 using namespace std; 8 typedef long long ll; 9 //const int inf=0x3f3f3f3f; 10 const int maxn=1e5+7; 11 int v[maxn]; 12 double dp[maxn]; 13 int main(){ 14 ios::sync_with_stdio(0); 15 int n,m,a,b; 16 while(cin>>n>>m&&(n||m)){ 17 memset(dp, 0, sizeof dp); 18 memset(v, 0, sizeof v); 19 for(int i=0;i<m;i++){ 20 cin>>a>>b; 21 v[a]=b; 22 } 23 for(int i=n-1;i>=0;i--){ 24 if(v[i]){ 25 dp[i]=dp[v[i]]; 26 continue; 27 } 28 for(int j=1;j<=6;j++){ 29 dp[i]+=dp[i+j]/6.0; 30 } 31 dp[i]+=1; 32 } 33 printf("%.4f\n",dp[0]); 34 } 35 }
时间: 2024-10-24 23:15:51