题目描述:http://acm.hdu.edu.cn/showproblem.php?pid=4405
简单的概率dp
#include <stdio.h>
#include <string.h>
#define MAX_N 100007
int y[MAX_N];
double dp[MAX_N];
int main(){
int n, m, i, a, b;
while(scanf("%d%d", &n, &m), n != 0 || m != 0){
memset(y, 0, sizeof(y));
for(i = 0; i < m; i++){
scanf("%d%d", &a, &b);
y[a] = b;
}
memset(dp, 0, sizeof(dp));
for(i = n; i <= n+6; i++){
dp[i] = 0;
}
for(i = n-1; i>=0; i--){
if(y[i]){
dp[i] = dp[y[i]];
}else{
dp[i] = 1 + (dp[i+1]+dp[i+2]+dp[i+3]+dp[i+4]+dp[i+5]+dp[i+6])/6;
}
}
printf("%.4lf\n", dp[0]);
}
return 0;
}