【期望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,是很容易看出来的,然后由 ...
随机推荐
- Nginx Install 记录
一.安装编译工具及库文件 yum -y install gcc yum -y install gcc-c++ yum -y install zlib; yum -y install pcre-deve ...
- Centos7下安装配置elasticsearch 6.3.1
1)下载 Elasticsearch 6.3.1 地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1 ...
- redis 在 php 中的应用(key篇)
本文为我阅读了 redis参考手册 之后结合 博友的博客 编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: KEY(键) DEL ...
- 清除Windows 10的文件夹浏览痕迹
windows 10有一个功能就是在快速访问时显示“最近访问的文件”,“常用文件”.如果是一台共用电脑,这个功能会经常暴露自己的“行踪”. 可以在“文件夹选项”-“隐私”中去掉勾选,并点击“清除”来清 ...
- Spring boot 配置https 实现java通过https接口访问
近来公司需要搭建一个https的服务器来调试接口(服务器用的spring boot框架),刚开始接触就是一顿百度,最后发现互联网认可的https安全链接的证书需要去CA认证机构申请,由于是调试阶段就采 ...
- 小白のjava实现wc.exe功能
GitHub地址 项目完成情况 基本功能列表(已实现) wc.exe -c file.c //返回文件 file.c 的字符数 wc.exe -w file.c //返回文件 file. ...
- vmware中centos6.7系统图形化安装Oracle-无法打开RUNINSTALLER
如果解压正确 unzip linux……1/2 unzip linux……2/2 给了权限 chown -R Oracle:oinstall /home/database/ 在oracle用户下,运行 ...
- leetcode 最后一个单词的长度 python
class Solution: def lengthOfLastWord(self, s): """ :type s: str :rtype: int "&qu ...
- iperf详细使用方法
Iperf 是一个网络性能测试工具.Iperf可以测试TCP和UDP带宽质量.Iperf可以测量最大TCP带宽, 具有多种参数和UDP特性.Iperf可以报告带宽,延迟抖动和数据包丢失. Iperf ...
- 利用matplotlib库和numpy库画数学图形
首先,电脑要安装到matplotlib库和numpy库,这可以通过到命令符那里输入“pip install matplotlib ”,两个操作一样 其次,参照下列代码: import numpy as ...