【期望dp】绵羊跳弹簧
【期望dp】 绵羊跳弹簧
>>>>题目
【题目】
T 组数据。对于每一组数据,有n+1 个格子从0 到n 标号,绵羊从0 号结点开始,每次若在 x 位置掷骰子,令掷出的数为num,则跳到 x+num 处。
另外还有 m 个弹簧,绵羊跳到一个有弹簧的格子上时,不需要掷骰子便可向右跳到某个位置(若此时仍有弹簧将继续向右跳),直到到达 n 或者超出 n 停止。
询问绵羊掷骰子的期望次数。
【输入格式】
第一行为一个整数T,表示数据组数。
接下来对于每组数据:首先一行两个数n, m,含义如题目所述,接下来每行两个数 a, b,
表示在格子 a 处有一个弹簧,将跳到格子 b 上(保证b>a)。
【输出格式】
输出T 行,每行一个实数,表示保留两位小数后的答案。
【输入样例】
2
2 0
8 3
2 4
4 5
7 8
【输出样例】
1.17
2.34
>>>>分析
看到题目,我们想到每一次的期望跳跃次数是由前面跳过的格子的期望次数推知的。
也就是说跳到下一个格子只与现在跳到的格子有关,与之前跳过的格子已经没有关系了,于是我们考虑使用dp(无后效性)
定义 dp[i] 表示 “在第 i 个格子跳到终点需要的期望步数”
那么怎样赋初值呢?练过许多期望和概率dp的题可以发现:
期望dp一般是倒推,概率dp一般是正推
因为在最后一个格子的时候已经跳到终点了,所以期望跳跃步数是0。然后再反向倒推回去,答案就是dp[0]
初值:dp[n]=0 答案dp[0]
想清楚了初值和答案,我们来想想递推式,从两种情况入手:
(一)绵羊没有跳弹簧
没有跳弹簧就说明可以从i点跳到i+1~i+6点,由
dp[i]+=(dp[i+j]+1)/6 (1<=j<=6)
dp[i+j]表示从i+j这个点跳到了i点(倒推),加一是因为扔了一次骰子,除以6相当于有六分之一的概率扔到1~6中的某一个数
(二)绵羊跳了弹簧
定义jmp[i]=j表示绵羊可从i点跳到j点,因为有弹簧不用扔骰子,转移方程为:
dp[i]=dp[jmp[i]]
多组数据记得清零噢!
【代码】
#include<bits/stdc++.h>
#define maxn 100005
using namespace std;
int jmp[maxn],n,m,T,a,b;
double dp[maxn];
void clear()
{
memset(jmp,,sizeof(jmp));
memset(dp,,sizeof(dp));
}
void solve()
{
dp[n]=;
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d",&a,&b);
jmp[a]=b;
}
for(int i=n-;i>=;i--)
{
dp[i]=;
if(!jmp[i])
{
for(int j=;j<=;j++)
dp[i]+=(dp[i+j]+)/;
}
else dp[i]=dp[jmp[i]];
}
printf("%.2lf\n",dp[]);
}
int main()
{
freopen("sheep.in","r",stdin);
freopen("sheep.out","w",stdout);
scanf("%d",&T);
while(T--)
{
clear();
solve();
}
return ;
}
完结撒花✿✿ヽ(°▽°)ノ✿诶嘿嘿嘿嘿嘿
纪念一下下小友第一次写博客
题目来源 :2019.2.19杨雅儒学长的考试题
【期望dp】绵羊跳弹簧的更多相关文章
- 【loj6342】跳一跳 期望dp
题目描述 一个人从 $1$ 开始向 $n$ 跳,在 $i$ 时会等概率跳到 $i,i+1,...,n$ 之一.求从 $1$ 跳到 $n$ 的期望步数. $n\le 10^7$ . 题解 期望dp傻逼题 ...
- 【BZOJ-4008】亚瑟王 概率与期望 + DP
4008: [HNOI2015]亚瑟王 Time Limit: 20 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 832 Solved: 5 ...
- 【期望DP】
[总览] [期望dp] 求解达到某一目标的期望花费:因为最终的花费无从知晓(不可能从$\infty$推起),所以期望dp需要倒序求解. 设$f[i][j]$表示在$(i, j)$这个状态实现目标的期望 ...
- 【BZOJ4008】【HNOI2015】亚瑟王 [期望DP]
亚瑟王 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 小 K 不慎被 LL 邪教洗脑了,洗 ...
- P3239 [HNOI2015]亚瑟王 期望dp
这个题一看就是期望dp,但是我有个问题,一个事件的期望等于他所有事件可能行乘权值的和吗...为什么我有天考试的时候就不对呢...求大佬解释一下. 至于这道题,f[i][j]代表前i个有j个发动技能,这 ...
- 清北集训Day1T3 LYK loves jumping(期望DP)
题目描述 LYK在玩一个魔法游戏,叫做跳跃魔法. 有n个点,每个点有两个属性hi和ti,表示初始高度,和下降高度.也就是说,它初始时高度为hi,一旦LYK踩在这个点上,由于重力的影响,这个点的高度会下 ...
- 【BZOJ-1419】Red is good 概率期望DP
1419: Red is good Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 660 Solved: 257[Submit][Status][Di ...
- [NOIP2016]换教室 D1 T3 Floyed+期望DP
[NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...
- HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)
题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...
随机推荐
- ld命令
ld 用于把目标代码文件连接为可执行文件或者库文件 参数 -b: 指定目标代码输入文件的格式 -Bstatic: 只使用静态库 -Bdynamic: 只使用动态库 -Bsymbolic: 把引用捆绑到 ...
- redis 列表(list)函数
列表(list)函数 lPush 命令/方法/函数 Description Adds the string value to the head (left) of the list. Creates ...
- 7zip 18.3性能测试
配置 7zip 18.3 bate3 的性能大幅提升,进行一点简单测试 配置为 E3 1230v2 3.5G 4核心/8线程 12G内存 均为8线程测试 压缩解压一个1.5G的虚拟机磁盘镜像 测试 再 ...
- c# 笔记cookie
if (Request.Cookies["svpoint"] != null) { Request.Cookies[].s_SvcID.ToString(); } else { H ...
- java问题排查之Load CPU很高
1首先 找到对应的java进程id ps -aux | grep java 这个命令可以找到 2.接下来就是查找比较耗CPU的线程id top -H -p pid 这里可以观察出来耗时最多的几个进程中 ...
- ssh很慢的问题转子
根据网上的解决办法解决了,记录一下: 问题:ssh ***@192.*.*.* ,然后就一直卡在这个地方,很久以后才会出现让输入密码的提示 解决办法:1.关闭防火墙--chkconfig ipta ...
- Qt框架及模块认识
小白自工作就接触Qt,一直都在使用Qt5.3.1版本,所以没有经历过大牛们把项目从Qt4程序到Qt5的烦恼,没准以后会碰到.对Qt所有的丰富的API表示惊叹,对于Qt的框架及模块认识也是极为模糊的,文 ...
- activemq修改端口
1.修改TCP 61616端口 cd /apps/svr/activemq/conf cat activemq.xml |grep transportConnector <transportCo ...
- CentOS 7安装mysql(rpm)
1.检查是否安装了mysql rpm -qa|grep -i mysql centos7默认是安装的mariadb,而安装mysql的话会和mariadb的文件冲突,所以需要先卸载掉mariadb 2 ...
- LeetCode Weekly Contest 118
要死要死,第一题竟然错误8次,心态崩了呀,自己没有考虑清楚,STL用的也不是很熟,一直犯错. 第二题也是在室友的帮助下完成的,心态崩了. 970. Powerful Integers Given tw ...