hdoj4405-Aeroplane chess

求期望值,体重说明,如果可以flight的话就直接到达规定那个点,用f数组将两个点连在一起就可以,反之,就要求打骰子后的期望啦,e[i] = (e[i + k] * 1 / 6) + 1(k为点数1~6,1/6为致筛子的概率,因为不可以flight就要置一次筛子,所以+1)。

/*************************************************************************> File Name: hdoj4405.cpp> Author: AcToy> Mail: ycsgldy@163.com> Created Time: 2013年07月17日 星期三 09时19分05秒************************************************************************/#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include using namespace std;
typedef unsigned int u32;
typedef long long i64;
typedef unsigned long long u64;
typedef vector IV;
typedef vector BV;
typedef pair II;
typedef vector IIV;
#define For(t,v,c) for(t::const_iterator v=c.begin(); v!=c.end(); ++v)
const int INF = 0x7FFFFFFF;
const double eps = 1E-10;
const double PI = acos(-1);
const int maxn = 100000;
double e[maxn];
int f[maxn], n, m;
int main () {while(scanf("%d%d", &n, &m) == 2 && n) {memset(f, 0, sizeof(f));for(int i = 0; i <= n; e[i] = 0, ++i) ;for(int i = 1; i <= m; ++i) {int x, y;scanf("%d%d", &x, &y);f[x] = y;}for(int i = n - 1; i >= 0; --i) {if(f[i]) e[i] = e[f[i]];else {for(int j = 1; j <= 6; ++j) {if(i + j <= n) e[i] += e[i + j] * 1.0 / 6;else break;}e[i] += 1.0;}}printf("%.4lf\n", e[0]);}return 0;
}



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部