loj #6191. 「美团 CodeM 复赛」配对游戏 期望dp
题意:有一个栈,随机插入 $n$ 次 $0$/$1$
如果栈顶是 $1$,然后插入 $0$,则将这两个元素都弹出,否则,插入栈顶.
求:$n$ 次操作后栈中期望的元素个数.
我们发现,按照上述弹栈方式进行,栈中元素一定是由若干个连续 $0$ 加上若干个连续 $1$ 组成.
而 $1$ 所在的联通块还在栈顶,所以我们只需考虑 $1$ 的个数即可.
令 $f[i][j]$ 表示 $i$ 次操作过后,栈中有 $j$ 个 $1$ 时期望的元素个数.
由于期望在任何时候都有可加性,所以 $f[i+1][]$ 的期望可以表示成 $f[i][]$ 加上新加入/删掉 $1$ 的期望.
我们令 $p[i][j]$ 表示 $i$ 轮操作后栈中有 $j$ 个 $1$ 的概率,那么有 $\frac{f[i][j]+p[i][j]}{2}\rightarrow f[i+1][j+1]$
因为 $i$ 轮后有 $j$ 个 $1$ 的期望个数是 $f[i][j]$,而下一轮要保证抽到的还是 $1$,所以概率为 $\frac{1}{2}$
即 $f[i][j]\times \frac{1}{2}$ 但是在当前局面增加的长度绝对不是 $\frac{1}{2}$ 因为期望等于概率乘以权值.
而 $i$ 轮后有 $j$ 个 $1$ 的长度的概率是 $p[i][j]$,而下一次还抽到 $1$ 的概率是 $\frac{1}{2}$,权值是 $1$
所以累加的是 $\frac{p[i][j]}{2}$
整理可得 $\frac{f[i][j]+p[i][j]}{2}\rightarrow f[i+1][j+1]$,$\frac{f[i][j]-p[i][j]}{2}\rightarrow f[i+1][j-1]$
这种用概率来转移期望的套路还真是挺巧妙的~
#include <bits/stdc++.h>
#define N 2004
#define LL long long
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
double p[N][N],f[N][N];
int main()
{
// setIO("input");
int i,j,n;
scanf("%d",&n), p[0][0]=1;
double ans=0.0;
for(i=0;i<n;++i)
{
p[i+1][1]+=p[i][0]/2, f[i+1][1]+=(f[i][0]+p[i][0])/2;
p[i+1][0]+=p[i][0]/2, f[i+1][0]+=(f[i][0]+p[i][0])/2;
for(j=1;j<n;++j)
{
p[i+1][j+1]+=p[i][j]/2, f[i+1][j+1]+=(f[i][j]+p[i][j])/2;
p[i+1][j-1]+=p[i][j]/2, f[i+1][j-1]+=(f[i][j]-p[i][j])/2;
}
}
for(i=0;i<=n;++i) ans+=f[n][i];
printf("%.3f\n",ans);
return 0;
}
loj #6191. 「美团 CodeM 复赛」配对游戏 期望dp的更多相关文章
- LibreOJ #6191. 「美团 CodeM 复赛」配对游戏
二次联通门 : LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 /* LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 概率dp */ #include <cs ...
- 【loj6191】「美团 CodeM 复赛」配对游戏 概率期望dp
题目描述 n次向一个栈中加入0或1中随机1个,如果一次加入0时栈顶元素为1,则将这两个元素弹栈.问最终栈中元素个数的期望是多少. 输入 一行一个正整数 n . 输出 一行一个实数,表示期望剩下的人数, ...
- 【loj6191】「美团 CodeM 复赛」配对游戏
题目 显然期望dp. 简单想法: f[i][j]表示前i个人中向右看并且没有被消除的人数的概率 如果第i+1个人是向右,$f[i+1][j+1]=f[i][j]/2$ 如果第i+1个人是向左,$f[i ...
- LOJ #6192. 「美团 CodeM 复赛」城市网络 (树上倍增)
#6192. 「美团 CodeM 复赛」城市网络 内存限制:64 MiB 时间限制:500 ms 标准输入输出 题目描述 有一个树状的城市网络(即 nnn 个城市由 n−1n-1n−1 条道路连接 ...
- LibreOJ #6192. 「美团 CodeM 复赛」城市网络
#6192. 「美团 CodeM 复赛」城市网络 内存限制:64 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: sqc 提交提交记录统计讨论测试数据 题目描 ...
- [LOJ 6213]「美团 CodeM 决赛」radar
[LOJ 6213]「美团 CodeM 决赛」radar 题意 给定 \(n\) 个横坐标 \(x_i\) , 为它们选择一个不超过 \(y_i\) 的纵坐标 \(h_i\), 产生 \(c_ih_i ...
- LOJ#6085. 「美团 CodeM 资格赛」优惠券(set)
题意 题目链接 Sol 考虑不合法的情况只有两种: 进去了 再次进去 没进去 但是出来了 显然可以用未知记录抵消掉 直接开个set维护一下所有未知记录的位置 最优策略一定是最后一次操作位置的后继 同时 ...
- 「美团 CodeM 复赛」城市网络
题目链接 题意分析 首先 \([u,v]\)在树上是一条深度递增的链 那么我们可以使用倍增找 \(x\)的祖先当中深度最大的值大于\(x\)的点 然后维护一个\(pre\) 重新建树 这样从\(x\) ...
- loj 6085.「美团 CodeM 资格赛」优惠券
题目: 一个有门禁的大楼,初始时里面没有人. 现在有一些人在进出大楼,每个人都有一个唯一的编号.现在有他们进出大楼的记录,但是有些被污染了,只能知道这里有一条记录,具体并不能知道. 一个人只有进大楼, ...
随机推荐
- 「APIO2016」烟花表演
「APIO2016」烟花表演 解题思路 又是一道 solpe trick 题,观察出图像变化后不找一些性质还是挺难做的. 首先令 \(dp[u][i]\) 为节点 \(u\) 极其子树所有叶子到 \( ...
- go 学习笔记(4) --变量与常量
“_” 可以理解成一个垃圾桶,我们把值赋给“_” ,相当于把值丢进垃圾桶,在接下来的程序中运行中不需要这个下划线这个值 a,b :=1,2 只能用在函数体内 package main impor ...
- centos7.5 离线安装ntp服务
安装 #检查rpm包 rpm -qa | grep ntp #从https://pkgs.org/download/ntp 下载rpm包 ntp-4.2.6p5-28.el7.centos.x86_6 ...
- NEST analyze与mapping
/// <summary> /// POST /_analyze?pretty=true /// POST /employee/_analyze /// </summary> ...
- 从ghost映像.gho文件快速创建vmware虚拟机
从ghost映像.gho文件快速创建vmware虚拟机 https://www.cnblogs.com/blog2018/p/8857146.html ghost文件.gho和vmware文件都是磁盘 ...
- 【转载】Extjs设置Ajax请求的超时时间timeout
在Extjs中的Ajax请求中,Ext.Ajax.request 默认超时时间是30秒,有时候我们有比较耗时的操作需要设置更长时间,此时我们就需要修改Ext.Ajax.Requset的超时时间为更长, ...
- centos下安装nginx(转载)
http://blog.csdn.net/u010246789/article/details/51501710 有声明,不能转载,所以,就把地址弄了过来
- BIN文件合并烧写
可以实现将Bootloader和Application合并烧写 使用UBIN.exe工具或者J-Flash工具 UBIN工具 选择Bootloader源文件 添加Bootloader源文件 选择App ...
- C# 利用特性(Attribute)实现通用实体类数据合法校验
用过asp.net mvc 的都应该知道,在实体类上添加一些特性,可以实现后端实体的数据校验,这里简单实现一下 实现原理:利用反射获取实体的每一个属性,并通过属性获取属性上标注的特性,调用特性的Val ...
- 安装xadmin模板依赖
### 安装xadmin模板依赖sudo pip3 install django-crispy-forms django-formtools django-import-export django-r ...