您的位置:首页 > 运维架构

hdu 4405 Aeroplane chess 概率dp

2015-12-03 11:56 190 查看
传送门

给0-n这么多个格子, 初始在0, 然后扔骰子, 扔到几就走几步, 其中有些格子是相连的, 比如2,5相连, 那么到2就可以直接飞到5。 问到n处的期望步数。

首先肯定是倒着推的, dp
= 0. 然后如果x, y(x<y)相连, 那么dp[x] = dp[y]。转移方程很好写。具体见代码

#include<bits/stdc++.h>
using namespace std;
#define mem(a) memset(a, 0, sizeof(a))
double dp[100005];
int num, f[100005], vis[100005];
int main()
{
int n, m, x, y;
while(cin>>n>>m) {
if(n+m==0)
break;
mem1(f);
while(m--) {
scanf("%d%d", &x, &y);
f[x] = y;
}
mem(dp);
mem(vis);
dp
= 0;
for(int i = n-1; i>=0; i--) {
if(~f[i]) {
dp[i] = dp[f[i]];
} else {
for(int j = 1; j<=6; j++) {
dp[i] += (1+dp[i+j])/6.0;
}
}
}
printf("%.4f\n", dp[0]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: