http://acm.hdu.edu.cn/showproblem.php?pid=4405
题意:问从起点到终点需要步数的期望,1/6的概率走1、2、3、4、5、6步。有的点a有路可以直接到b,满足a<b。
期望dp,水题,总感觉以前做过类似的,可能因为期望dp基础题都是这个德行。
代码
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cmath> 6 #include<queue> 7 using namespace std; 8 const int maxn=100010; 9 const double eps=1e-8; 10 const int modn=998244353; 11 int n,m; 12 int a[maxn]={}; 13 double f[maxn]={}; 14 int main(){ 15 int x,y; 16 while(~scanf("%d%d",&n,&m)){ 17 if(n==0&&m==0){ 18 break; 19 } 20 memset(a,0,sizeof(a)); 21 memset(f,0,sizeof(f)); 22 for(int i=1;i<=m;i++){ 23 scanf("%d%d",&x,&y); 24 a[x]=y; 25 } 26 for(int i=n-1;i>=0;i--){ 27 if(a[i]){ 28 f[i]=f[a[i]]; 29 } 30 else{ 31 f[i]=(f[i+1]+f[i+2]+f[i+3]+f[i+4]+f[i+5]+f[i+6])/6+1; 32 } 33 } 34 printf("%.4f ",f[0]); 35 } 36 return 0; 37 }