Aeroplane chess

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 1628    Accepted Submission(s): 1103

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

从0点走到n点。每一次掷筛子得x,向前走x步,有m条飞行通道,能够不算向前走,直接飞到。没有两个飞行线路从同一个点出发,问期望。

dp[i] = ∑(1/6*dp[i+j])+1 ;

对于飞行路线,由i到j的飞行路线,那么就意味着,当它到第i个位置的时候。他就到了第j个位置。dp[i] == dp[j]

从后先前dp,对于每个以计算的dp。有没有飞行路线能够到达这个点,假设有那么那个点的dp也就计算出了

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct node{
int u , v ;
int next ;
}p[2000];
int head[100000] , cnt ;
double dp[110000] , k[7];
void add(int u,int v)
{
p[cnt].u = u ;
p[cnt].v = v ;
p[cnt].next = head[v] ;
head[v] = cnt++ ;
}
int main()
{
int n , m , i , j , l , u , v ;
for(i = 1 ; i <= 6 ; i++)
k[i] = 1.0/6 ;
while(scanf("%d %d", &n, &m) && n+m != 0)
{
memset(head,-1,sizeof(head));
for(i = 0 ; i < n ; i++)
dp[i] = -1;
cnt = 0 ;
while(m--)
{
scanf("%d %d", &u, &v);
add(u,v);
}
for(i = n ; i <= n+6 ; i++)
dp[i] = 0 ;
for(l = head[n] ; l != -1 ; l = p[l].next)
dp[ p[l].u ] = dp[n] ;
for(i = n-1 ; i >= 0 ; i--)
{
if( dp[i] != -1 )
{
for(l = head[i] ; l != -1 ; l = p[l].next)
dp[ p[l].u ] = dp[i] ;
continue ;
}
dp[i] = 1 ;
for(j = 1 ; j <= 6 ; j++)
dp[i] += k[j]*dp[i+j] ;
for(l = head[i] ; l != -1 ; l = p[l].next)
dp[ p[l].u ] = dp[i] ;
}
printf("%.4lf\n", dp[0]);
}
return 0;
}

hdu4405--Aeroplane chess(概率dp第七弹:飞行棋游戏--2012年网络赛)的更多相关文章

  1. HDU4405 Aeroplane chess (概率DP,转移)

    http://acm.hdu.edu.cn/showproblem.php?pid=4405 题意:在一个1×n的格子上掷色子,从0点出发,掷了多少前进几步,同时有些格点直接相连,即若a,b相连,当落 ...

  2. [hdu4405]Aeroplane chess(概率dp)

    题意:某人掷骰子,数轴上前进相应的步数,会有瞬移的情况,求从0到N所需要的期望投掷次数. 解题关键:期望dp的套路解法,一个状态可以转化为6个状态,则该状态的期望,可以由6个状态转化而来.再加上两个状 ...

  3. [ACM] hdu 4405 Aeroplane chess (概率DP)

    Aeroplane chess Problem Description Hzz loves aeroplane chess very much. The chess map contains N+1 ...

  4. HDU 4405 Aeroplane chess (概率DP)

    题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i  这个位置到达 n ...

  5. HDU4405 Aeroplane chess(期望dp)

    题意 抄袭自https://www.cnblogs.com/Paul-Guderian/p/7624039.html 正在玩飞行棋.输入n,m表示飞行棋有n个格子,有m个飞行点,然后输入m对u,v表示 ...

  6. HDU 4405 Aeroplane chess 概率DP 难度:0

    http://acm.hdu.edu.cn/showproblem.php?pid=4405 明显,有飞机的时候不需要考虑骰子,一定是乘飞机更优 设E[i]为分数为i时还需要走的步数期望,j为某个可能 ...

  7. HDU 4405 Aeroplane chess(概率dp,数学期望)

    题目 http://kicd.blog.163.com/blog/static/126961911200910168335852/ 根据里面的例子,就可以很简单的写出来了,虽然我现在还是不是很理解为什 ...

  8. 【HDU4405】Aeroplane chess [期望DP]

    Aeroplane chess Time Limit: 1 Sec  Memory Limit: 32 MB[Submit][Stataus][Discuss] Description Hzz lov ...

  9. hdu4405 Aeroplane chess

    Aeroplane chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

随机推荐

  1. [luogu] P4364 [九省联考2018]IIIDX(贪心)

    P4364 [九省联考2018]IIIDX 题目背景 Osu 听过没?那是Konano 最喜欢的一款音乐游戏,而他的梦想就是有一天自己也能做个独特酷炫的音乐游戏.现在,他在世界知名游戏公司KONMAI ...

  2. 报错:SyntaxError: Non-ASCII character '\xe4' in file

    SyntaxError: Non-ASCII character '\xe1' in file recommendation.py on line 1, but no encoding declare ...

  3. js本地对象——Date()

    Date()是JavaScript的本地对象,用于获取当前的时间,包括年.月.日.时.分.秒,可以精确到毫秒级:该对象返回的是UTC 协调世界时(Coordinated Universal Time) ...

  4. linux部分常用命令

    linux的命令挺多的,下面是我常用的,其实也不可能在敲代码的时候把这个博客拿出来对着写,就是想记录一下,刚开始都觉得不好记,多敲几遍就记住了!!! 创建文件夹:mkdir filename 删除当前 ...

  5. java字符文件的读写

    1.java文件读写,首先我们需要导入相应的包:java.io.*; 2.代码如下: package Demo1; import java.io.*; public class FileWirteTe ...

  6. Sublime Text 3 Package Control安装

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50618314 安装好Sublime T ...

  7. 百度语音识别服务 —— 语音识别 REST API 开发笔记

    http://blog.csdn.net/lw_power/article/details/51771267

  8. ASP.NET-未解决的问题

    001.((FormsIdentity)User.Identity).Ticket.UserData 用ASP.NET后台格式化成json数据后传回去的数据有&quot这样的符号 002.HT ...

  9. ASP.NET-Session cooike

    Application .Cookie和 Session 两种会话有什么不同 答:Application是用来存取整个网站全局的信息,而Session是用来存取与具体某个访问者关联的信息, Sessi ...

  10. Scratch单机版下载

    Scratch单机版下载 这两个地址速度比较快: Adobe Air:http://7dx.pc6.com/wwb5/AdobeAIR2800127.zip Scratch :http://7dx.p ...