[hdu4405]Aeroplane chess(概率dp)

时间:2022-12-03 15:38:29

题意:某人掷骰子,数轴上前进相应的步数,会有瞬移的情况,求从0到N所需要的期望投掷次数。

解题关键:期望dp的套路解法,一个状态可以转化为6个状态,则该状态的期望,可以由6个状态转化而来。再加上两个状态的消耗即可。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<iostream>
using namespace std;
typedef long long ll;
//const int inf=0x3f3f3f3f;
const int maxn=1e5+;
int v[maxn];
double dp[maxn];
int main(){
ios::sync_with_stdio();
int n,m,a,b;
while(cin>>n>>m&&(n||m)){
memset(dp, , sizeof dp);
memset(v, , sizeof v);
for(int i=;i<m;i++){
cin>>a>>b;
v[a]=b;
}
for(int i=n-;i>=;i--){
if(v[i]){
dp[i]=dp[v[i]];
continue;
}
for(int j=;j<=;j++){
dp[i]+=dp[i+j]/6.0;
}
dp[i]+=;
}
printf("%.4f\n",dp[]);
}
}