【期望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,是很容易看出来的,然后由 ...
随机推荐
- SpringBoot缓存之redis--最简单的使用方式
第一步:配置redis 这里使用的是yml类型的配置文件 mybatis: mapper-locations: classpath:mapping/*.xml spring: datasource: ...
- 在dotnetcore的MVC项目中,创建支持 vue.js 的最小工程模板
网上Vue模板不是最新的,我自己做了一个最新的支持 Vue.js 的最小工程模板,方便大家从 Hello world. 入门, 在 VS2017 里学习,并扩展出自己的项目. 下面是创建步骤: 1.在 ...
- vue 定义全局函数,监听android返回键事件
vue 定义全局函数,监听android返回键事件 方法一:main.js 注入(1)在main.js中写入函数Vue.prototype.changeData = function (){ aler ...
- Path Analyzer Pro出现raw socket问题
使用windows7,8以及10平台运行一个traceroute liketools软件,名为Path Analyzer Pro 2.7,遇到raw socket问题,如图: 原因是raw socke ...
- tomcat服务器1
1.在访问servlet时,一定要引入servlet-api.jar包 此包在Tomcat解压文件夹的lib子目录中,复制此包到Eclipse中的项目中WEB-INF的lib中,再右击Build Pa ...
- Flutter 数据存储 加权限 sharedpreference, sqflite, file
要访问SD卡,首先读取权限肯定是要有的,不然写再多代码都是无用功.在AndroidManifest.xml文件中添加 <uses-permission android:name="an ...
- VMware install MikroTik RouterOS
1 download the vmdk from Mikro Tik official website 2 create a new vmware host with use an exited vm ...
- C# 为所有 CheckBox 添加事件
C# 为 form 窗体中的所有相同组件循环添加相同事件,这样减少了代码量. private void Form2_Load(object sender, EventArgs e) { foreach ...
- 主成分分析 SPSS、python实例分析
今天,在西瓜书上看到了主成分分析法,之前建模有接触过但是理解不够深刻,今天再次和这一位老朋友聊聊. 主成分分析(Principal Component Analysis,PCA), 是一种统计方法.通 ...
- MyBatis Generator 自定义生成注释
注释生成器 为了生成db里面的注释,必须自定义注释生成器 EmptyCommentGenerator: import org.mybatis.generator.api.CommentGenerato ...