hdu4405:Aeroplane chess
题目大意:有编号为0-n的格子,从0开始,扔骰子扔到几就走几格。有m个瞬移点,每个点可以从格x直接飞到格y,若瞬移到另一个瞬移点可以继续瞬移。求到达格n的期望扔骰子次数。
题解:期望DP入门好题。网上神犇们都说,“经验表明,一般情况下,求期望的题从后往前推。”本蒟蒻一开始不明白,谁给你的权利一定要从后往前啊!于是我就写了这样一个式子:
E(i)——到格i期望,E(i)=i是某个瞬移目标点?(E(x),x指瞬移出发点),否则E(i-1)*1/6+E(i-2)*1/6+...+E(i-6)*1/6+1,注意最后把“又走了一步”加上。标准全期望公式。于是高高兴兴地通过了第一组数据。然后测试第二组。。。。。。那么问题究竟出在哪里呢?
问题一:若i是瞬移目标点,在平均的情况下,凭什么一定认为到达i的情况和到达i对应的出发点的情况完全一样?显然
在上图情况中,0到2的所有方法并不对应到5的所有方法。如果按原先的思路,那么0->3->5等的情况将被无情地忽略。
问题二:i格走到后面1-6格的概率为1/6,不!能!认!为!i格前1-6格走到i的概率为1/6。虽然在m=0的时候这两者碰巧等价了,但加入瞬移点后,到达一个格的方法多种多样,概率当然不尽相同,而一个格向前运行的概率是永恒的。
通往目标的路变幻莫测,而我们向前发展的步伐是永恒的。
言归正传,我们只能从目标退回来。E(i)——i格到n的期望,E(i)=E(i+1)*1/6+...+E(i+6)*1/6+1,边界是E(n),严格的,E(n),E(n+1),...,E(n+5)=0。E(0)即为所求。至于瞬移出发点,E(i)=E(go(i)),go(i)指瞬移到达点。虽然看起来跟之前差不多,但这样做无可厚非。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std; int n,m;
#define maxn 100011
int go[maxn];double E[maxn];
#define eof 1e-9
int main()
{
while (scanf("%d%d",&n,&m) && (n || m))
{
memset(go,,sizeof(go));
for (int i=;i<=m;i++)
{
int x,y;scanf("%d%d",&x,&y);
go[x]=y;
}
memset(E,,sizeof(E));
for (int i=n-;i>=;i--)
{
if (!go[i]) {for (int j=;j<=;j++) E[i]+=E[j+i]/6.0;E[i]+=;}
else E[i]=E[go[i]];
}
printf("%.4lf\n",E[]);
}
return ;
}
hdu4405:Aeroplane chess的更多相关文章
- HDU 4405:Aeroplane chess(概率DP入门)
http://acm.split.hdu.edu.cn/showproblem.php?pid=4405 Aeroplane chess Problem Description Hzz loves ...
- 【HDU4405】Aeroplane chess [期望DP]
Aeroplane chess Time Limit: 1 Sec Memory Limit: 32 MB[Submit][Stataus][Discuss] Description Hzz lov ...
- HDU 4405: Aeroplane chess
类型:概率DP 题意:一条直线下飞行棋,色子六个面等概率.同时存在一些飞机航线,到了某个点可以直接飞到后面的另一个点,可以连飞,保证一个点至多一条航线.求到达或者超过终点 所需要 掷色子的期望次数. ...
- HDU-4405 Aeroplane chess
http://acm.hdu.edu.cn/showproblem.php?pid=4405 看了一下这个博客http://kicd.blog.163.com/blog/static/12696191 ...
- 刷题总结——Aeroplane chess(hdu4405)
题目: Problem Description Hzz loves aeroplane chess very much. The chess map contains N+1 grids labele ...
- hdu4405 Aeroplane chess
Aeroplane chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- hdu 4405 Aeroplane chess(简单概率dp 求期望)
Aeroplane chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- 【HDOJ】【4405】Aeroplane chess飞行棋
概率DP/数学期望 kuangbin总结中的第4题 啊还是求期望嘛……(话说Aeroplane chess这个翻译怎么有种chinglish的赶脚……) 好像有点感觉了…… 首先不考虑直飞的情况: f ...
- hdu 4405 Aeroplane chess (概率DP)
Aeroplane chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
随机推荐
- Handler引起的内存泄露
一般我都写handler的时候是这样的: public class MyActivity extends Activity{ private final Handler myHandler = n ...
- qt sql多重条件查询简便方法
转载请注明出处:http://www.cnblogs.com/dachen408/p/7457312.html 程序设计过程中,经常要涉及到查询,并且有很多条件,且条件可为空,如果逐个判断,会有很多情 ...
- centos开机直接进入命令行
找到文件,/etc/inittab 文件,在下面有一行 id:5:initdefault: 将上面的5改成3就可以了 5是图形界面 3是命令行界面 就是文本界面.
- (译)IOS block编程指南 2 block开始
Getting Started with Blocks(开始block) The following sections help you to get started with blocks usin ...
- OpenJudge_2757:最长上升子序列
描述一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的.对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列(ai1 ...
- 油猴 tamperMonkey 在百度首页 添加自己的自定义链接
发现 GM_addStyle 函数不能用了,从写加载css函数. 剩下找个定位 添加内容 就很简单了. // ==UserScript== // @name helloWorld // @namesp ...
- Promise 理解与使用
个人觉得这篇博客写的非常详细且易懂,推荐给小伙伴们~ https://www.cnblogs.com/lvdabao/p/es6-promise-1.html#!comments
- 让idea调试不进入class文件中去
- Java 垃圾回收机制 (分代垃圾回收ZGC)
什么是自动垃圾回收? 自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制.所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象:而未使用中的对象(未引 ...
- luogu P2734 游戏 A Game
https://www.luogu.org/problemnew/show/P2734 数据范围比较小,二位DP可做,而luogu 3004,虽然几乎一模一样(只是数据范围大点),则需要压维. 定义f ...