【期望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,是很容易看出来的,然后由 ...
随机推荐
- Vue系列之 => webpack处理样式文件
处理css文件 安装 npm i style-loader css-loader -D main.js import $ from 'jquery' //Es6中导入模块的方式 import './c ...
- 解析搜狗实验室精简版数据:1、批量将.txt编码格式转化为utf8 2、解析提取数据
在搜狗实验室里下载了精简版的数据,解压后是一个文件,里面有很多个.txt文档,里面编码格式都是ASCII.现需要将这些编码格式转化为utf-8,以下是python3语言编写的脚本,一般只需改变path ...
- 2018-2019-2 20165305《网络攻防技术》Exp5 MSF基础应用
1. 实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.1一个主动攻击实践,如ms08_067; (1分) 1.2 一个针对浏览器的攻击, ...
- 火狐开发----从头用到尾的cfx
此教程阐述了如何使用 SDK 开发一个简单的扩展. 准备 要想使用 SDK 开发 Firefox 的扩展,您首先需要 安装并激活 SDK.一旦您完成了以上步骤,您将会看到一个命令行窗口. 初始化一个空 ...
- Java笔记 #06# 自定义简易参数校验框架——EasyValidator
索引 一.校验效果演示 二.校验器定义示例 定义一个最简单的校验器 正则校验器 三.EasyValidator的实现 四.更好的应用姿势——配合注解和面向切面 “参数校验”属于比较无聊但是又非常硬性的 ...
- spring-IoC的配置文件applicationContext.XML
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- IDEA汉化教程
https://blog.csdn.net/weixin_38500325/article/details/81393251
- JS(JavaScript)的进一步了解3(更新中···)
数据的三种存储方式 String “ ” Array [ ] Json { } 所有编程语言java c python c++ 等 他们都是面向对象编程,面向对象必须有三大特点,封装, ...
- JS宽高理解
1.clentWidth和clientHeight ①加入无padding.无滚动条显示占据位置 clientWidth=style.width ②假如有padding.无滚动 clientWidth ...
- 创建您的 ActiveReports Web端在线报表设计器
概述 ActiveReports Web端在线报表设计器已经正式上线!看到它这么帅气.实用,你是不是也想自己动手创建一个? 现在我们就来教您,如何创建一个简单的 ActiveReports Web端在 ...