hdu 4405Aeroplane chess(概率DP)
Aeroplane chess
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1581 Accepted Submission(s): 1082
Problem Description
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
Source
2012 ACM/ICPC Asia Regional Jinhua Online
有一个长条形棋盘,每一次可以跳1,2,3,4,5,6中的一种的距离,且每一跳的概率相等1/6;且在某一个点出有一个航班可以帮助他不需要跳直接可以达到y处
问到n平均需要跳多少次。
dp【n】=0;因为在哪里不需要再跳,这个已知,所以可以倒退
dp[i]=sum{1+dp[n+j]}(1<=j<=6)
代码:
1 #include<cstdio>
2 #include<cstring>
3 #include<stack>
4 #define maxn 100008
5 using namespace std;
6 double dp[maxn];
7 stack<int> path[maxn];
8 int pa[maxn];
9 int main()
10 {
11 int n,m,a,b;
12 while(scanf("%d%d",&n,&m)!=EOF&&n+m)
13 {
14 memset(pa,0,sizeof(int)*(n+2));
15 memset(dp,0,sizeof(double)*(n+8));
16 while(m--)
17 {
18 scanf("%d%d",&a,&b);
19 path[b].push(a);
20 pa[a]=b;
21 }
22 while(--n>=0)
23 {
24 while(!path[n+1].empty())
25 {
26 dp[path[n+1].top()]=dp[n+1];
27 path[n+1].pop();
28 }
29 if(pa[n]==0)
30 dp[n]=1.0+(dp[n+1]+dp[n+2]+dp[n+3]+dp[n+4]+dp[n+5]+dp[n+6])/6.0;
31 }
32 printf("%.4lfn",dp[0]);
33 }
34 return 0;
35 }
- Spring Cloud第一篇 Eureka简介及原理
- 华为面试题——约瑟夫问题的C++简单实现(循环链表)
- (49) 剖析LinkedHashMap / 计算机程序的思维逻辑
- Python多进程并行编程实践-mpi4py的使用
- 华为面试题——一道关于指针方面的编程题(C/C++)
- Spring Cloud第二篇 创建一个Eureka Server
- 数据挖掘实战(一):Kaggle竞赛经典案例剖析
- 华为面试题——单向链表倒转(一次遍历)
- Flask一步步搭建web应用
- (44) 剖析TreeSet / 计算机程序的思维逻辑
- (46) 剖析PriorityQueue / 计算机程序的思维逻辑
- (48) 剖析ArrayDeque / 计算机程序的思维逻辑
- 那些年在win下填过的Django坑
- Python爬虫一步步抓取房产信息
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 为什么Python没有main函数?
- 构建对象检测模型
- OpenCV4.4 + YOLOv4 真的可以运行了…..
- 基于分类任务的信号(EEG)处理
- 面试:如何决定使用 HashMap 还是 TreeMap?
- 有理有据:一篇来自前端同学对后端接口的吐槽!
- 【从0到1学算法】选择排序
- 【从0到1学算法】大O表示法
- 锦囊篇|一文摸懂AsyncTask
- 在Substrate链上跑Solidity ERC20智能合约
- 【Nginx】实现负载均衡、限流、缓存、黑白名单和灰度发布,这是最全的一篇了!
- 对称二叉树
- 你可能会踩到的一个 Eloquent 小坑
- 谨慎使用 Laravel 的 Model 复制(replicate)功能
- 0791-5.13.1-Hive视图执行show create table被截断异常分析