题意:

飞行棋。有n+1格,开始时在0号格子,每一步都要扔一个dice(六个面,概率相同)哪一面朝上他就会向前走x+i步。当x+i大于等于N的时候,游戏结束。另外,地图上有m条航线。第i条航线可以直接从xi到yi。计算扔dice次数的期望。

题目:

Hzz loves aeroplane chess very much. The chess map contains N+1 grids labeled from 0 to N. Hzz starts at grid 0. For each step he throws a dice(a dice have six faces with equal probability to face up and the numbers on the faces are 1,2,3,4,5,6). When Hzz is at grid i and the dice number is x, he will moves to grid i+x. Hzz finishes the game when i+x is equal to or greater than N.

There are also M flight lines on the chess map. The i-th flight line can help Hzz fly from grid Xi to Yi (0<Xi<Yi<=N) without throwing the dice. If there is another flight line from Yi, Hzz can take the flight line continuously. It is granted that there is no two or more flight lines start from the same grid.

Please help Hzz calculate the expected dice throwing times to finish the game.

Input

There are multiple test cases.
Each test case contains several lines.
The first line contains two integers N(1≤N≤100000) and M(0≤M≤1000).
Then M lines follow, each line contains two integers Xi,Yi(1≤Xi<Yi≤N).
The input end with N=0, M=0.

Output

For each test case in the input, you should output a line indicating the expected dice throwing times. Output should be rounded to 4 digits after decimal point.

Sample Input

2 0
8 3
2 4
4 5
7 8
0 0

Sample Output

1.1667
2.3441

分析:

这个题有一个默认的条件,如果当前格子有航线可以选择,那么就一定选择航线而不是掷色子。
最简单的概率DP,状态的定义需要从后往前定义,因为航线的缘故只能从后往前转移。

n个方程,回带一下就行。f[n]=0,所有标号i大于n的期望值f[i]也为0. 有虫洞 对于任何一个虫洞,起点的期望等于终点的期望。
例子。
比如n=3,m=0
所列方程为f[0]=1/6f[1]+1/6f[2]+1/6f[3]+1
f[1]=1/6e[2]+1/6e[3]+1
f[2]=1/6e[3]+1
f[3]=0
从0这个点可以到1,2,3,4,5,6这几个位置,由于大于等于3游戏结束,不会再有期望的投色子次数了,所以跳到3和大于3的格子里期望值也就都是0了。
所以我们列出n个方程后直接回带就能把f[0]求出来。如f[3]=0可以求出f[2]=1,已知了f[2]和f[3]就可以求出f[1],进而求出f[0].
两层for循环就是一个回带的过程。
题目还有可以直接从a跳到b,不需要投色子的,那样就直接标记一下,a的期望值也就等于b的期望值。(a<b)

定义f[i]为 从第i个格子到n个格子的期望次数是多少。
如果i格子有航线那么 f[i]=f[to] ,to是航线可以到达的格子。
如果i格子没有航线,那么f[i]=sum(1/6*f[i+k])+1,其中k是色子的六个面(1,2,3,4,5,6)。

ac代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int M=1e5+10;
int n,m;
int dp[M];
double f[M];
int main()
{while(scanf("%d%d",&n,&m)!=EOF&&(n||m)){memset(f,0,sizeof(f));memset(dp,-1,sizeof(dp));int x,y;for(int i=1; i<=m; i++){scanf("%d%d",&x,&y);dp[x]=y;}for(int i=n-1; i>=0; i--){if(dp[i]!=-1)f[i]=f[dp[i]];elsefor(int j=1; j<=6; j++){int to=min(n,i+j);f[i]+=(f[to]+1)*(double)1/6;}}printf("%.4f\n",f[0]);}return 0;
}

Aeroplane chess HDU - 4405(期望dp)相关推荐

  1. poj 2096 , zoj 3329 , hdu 4035 —— 期望DP

    题目:http://poj.org/problem?id=2096 题目好长...意思就是每次出现 x 和 y,问期望几次 x 集齐 n 种,y 集齐 s 种: 所以设 f[i][j] 表示已经有几种 ...

  2. 【HDU】4405 Aeroplane chess

    http://acm.hdu.edu.cn/showproblem.php?pid=4405 题意:每次可以走1~6格,初始化在第0格,走到>=n的格子就结束.还有m个传送门,表示可以从X[i] ...

  3. HDU 6656 Kejin Player (期望DP 逆元)

    2019 杭电多校 7 1011 题目链接:HDU 6656 比赛链接:2019 Multi-University Training Contest 7 Problem Description Cub ...

  4. Everything Is Generated In Equal Probability HDU 6595(期望dp)

    大致题意 好像是给一个数字n,然后随机选择一个1到n的数字,对其排列进行这样一种运算.首先res加上当前排列的逆序对数,然后再随机选择当前数列的子序列,继续进行该运算直到子序列长度为0.求res的期望 ...

  5. luogu P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现) Weblin ...

  6. [SCOI2008]奖励关(期望dp)

    你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃). 宝 ...

  7. 【bzoj4318】OSU! 期望dp

    题目描述 osu 是一款群众喜闻乐见的休闲软件.  我们可以把osu的规则简化与改编成以下的样子:  一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的0 ...

  8. 【loj6342】跳一跳 期望dp

    题目描述 一个人从 $1$ 开始向 $n$ 跳,在 $i$ 时会等概率跳到 $i,i+1,...,n$ 之一.求从 $1$ 跳到 $n$ 的期望步数. $n\le 10^7$ . 题解 期望dp傻逼题 ...

  9. 【高斯消元】兼 【期望dp】例题

    [总览] 高斯消元基本思想是将方程式的系数和常数化为矩阵,通过将矩阵通过行变换成为阶梯状(三角形),然后从小往上逐一求解. 如:$3X_1 + 2X_2 + 1X_3 = 3$ $           ...

最新文章

  1. oracle解析xml字符串命名空间,XML命名空间
  2. 【转载】究竟啥才是互联网架构“高可用”
  3. Oracle计划任务JOB不自动执行的问题
  4. django-vue-admin脚手架快速开发CRUD教程
  5. Error: Network is unreachable. Reason: couldn‘t connect to server localhost:27017(连接mongodb数据库失败)
  6. Redis_简单使用
  7. python3 xml 对象转字符串_Python3 基本数据类型详解
  8. 特征点检测 FAST算法及代码详解
  9. linux apache中文名称图片,Apache、NGINX支持中文URL图片、文件名的终极解决方案
  10. 爱因斯坦诞辰140周年:带你走近一个真实的爱神
  11. I_LIKE_CPP 多特游戏下载
  12. PHP7 下安装 memcache 和 memcached 扩展
  13. web 开发 —— html 与 css(div)
  14. Python入门经典(2K超清)
  15. 网页内嵌多媒体内容的完美实现
  16. 联机侠控制台JAVA_我的世界MultiMc启动器
  17. 飞思卡尔单片机学习记录(一)
  18. 爬虫---实现英语翻译(有道翻译)
  19. 源代码管理工具——VSS详解
  20. Affinity Designer Beta(mac设计绘图工具)

热门文章

  1. Android之使用ACTION_USAGE_ACCESS_SETTINGS权限检测手机多少天没有未使用其它APP
  2. 分布式和微服务区别_深度解析spring cloud分布式微服务的实现
  3. 油管螺纹尺寸对照表_yt15硬质合金刀片尺寸|A320焊接刀头参数
  4. 太努力工作的年轻人,都有病吧!?
  5. 华为鸿蒙OS 2.0正式发布!明年华为手机将全面支持!
  6. 论文排版怕翻车?这个排版神器赶紧用起来!
  7. 造作吧,Python快速入门!
  8. Excel有哪些需要熟练掌握而很多人不会的技能!
  9. 计算机广告制作未来发展还行吗,计算机多媒体设计专业和广告设计制作那个好...
  10. jmeter xml 请求_Jmeter学习笔记(十六)——HTTP请求之content-type