【loj6191】「美团 CodeM 复赛」配对游戏 概率期望dp
题目描述
n次向一个栈中加入0或1中随机1个,如果一次加入0时栈顶元素为1,则将这两个元素弹栈。问最终栈中元素个数的期望是多少。
输入
一行一个正整数 n 。
输出
一行一个实数,表示期望剩下的人数,四舍五入保留三位小数。
样例输入
10
样例输出
4.168
题解
概率期望dp
显然任何时刻栈中的元素自底至顶一定是若干个0+若干个1。
但是如果设状态$p[i][j][k]$表示前$i$次操作,栈中$j$个0,$k$个1的概率,复杂度是$O(n^3)$的,显然会TLE。
注意到$0$的个数对状态转移是没有影响的,而期望在任何时刻都具有可加性,因此可以设$f[i][j]$表示前$i$次操作,栈中$j$个1的期望元素个数。
那么直接考虑新加入一个是0还是1,看一下长度是增加还是减少即可。
这里有一个问题:每次增加或减少的长度是多少?由于我们设的是总情况的期望,而期望等于 概率*权值 ,这种情况的权值为1,因此期望值就是这种情况的概率。
所以还需要维护一个$p[i][j]$表示前$i$次操作,栈中$j$个1的概率。每次使用概率转移期望即可。
时间复杂度$O(n^2)$
#include <cstdio>
#define N 2010
double p[N][N] , f[N][N];
int main()
{
int n , i , j;
double ans = 0;
scanf("%d" , &n) , p[0][0] = 1;
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("%.3lf\n" , ans);
return 0;
}
【loj6191】「美团 CodeM 复赛」配对游戏 概率期望dp的更多相关文章
- LibreOJ #6191. 「美团 CodeM 复赛」配对游戏
二次联通门 : LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 /* LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 概率dp */ #include <cs ...
- 【loj6191】「美团 CodeM 复赛」配对游戏
题目 显然期望dp. 简单想法: f[i][j]表示前i个人中向右看并且没有被消除的人数的概率 如果第i+1个人是向右,$f[i+1][j+1]=f[i][j]/2$ 如果第i+1个人是向左,$f[i ...
- loj #6191. 「美团 CodeM 复赛」配对游戏 期望dp
题意:有一个栈,随机插入 $n$ 次 $0$/$1$ 如果栈顶是 $1$,然后插入 $0$,则将这两个元素都弹出,否则,插入栈顶. 求:$n$ 次操作后栈中期望的元素个数. 我们发现,按照上述弹栈方式 ...
- LOJ #6192. 「美团 CodeM 复赛」城市网络 (树上倍增)
#6192. 「美团 CodeM 复赛」城市网络 内存限制:64 MiB 时间限制:500 ms 标准输入输出 题目描述 有一个树状的城市网络(即 nnn 个城市由 n−1n-1n−1 条道路连接 ...
- LibreOJ #6192. 「美团 CodeM 复赛」城市网络
#6192. 「美团 CodeM 复赛」城市网络 内存限制:64 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: sqc 提交提交记录统计讨论测试数据 题目描 ...
- 「美团 CodeM 复赛」城市网络
题目链接 题意分析 首先 \([u,v]\)在树上是一条深度递增的链 那么我们可以使用倍增找 \(x\)的祖先当中深度最大的值大于\(x\)的点 然后维护一个\(pre\) 重新建树 这样从\(x\) ...
- [LOJ6191][CodeM]配对游戏(概率期望DP)
n次向一个栈中加入0或1中随机1个,如果一次加入0时栈顶元素为1,则将这两个元素弹栈.问最终栈中元素个数的期望是多少. 首先容易想到用概率算期望,p[i][j][k]表示已加入i个数,1有j个,总长为 ...
- 美团 CodeM 复赛」城市网络
美团 CodeM 复赛」城市网络 内存限制:64 MiB时间限制:500 ms标准输入输出 题目描述 有一个树状的城市网络(即 nnn 个城市由 n−1n-1n−1 条道路连接的连通图),首都为 11 ...
- [LOJ 6213]「美团 CodeM 决赛」radar
[LOJ 6213]「美团 CodeM 决赛」radar 题意 给定 \(n\) 个横坐标 \(x_i\) , 为它们选择一个不超过 \(y_i\) 的纵坐标 \(h_i\), 产生 \(c_ih_i ...
随机推荐
- jsonp跨域请求360数据乱码解决办法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- android 自定义图片圆形进度条
感觉话一个圆形进度条挺简单的 ,但是却偏偏给了几张图片让你话,说实话我没接触过,感觉好难,还好百度有大把的资源,一番努力下终于画出来了. 代码如下. package com.etong.cpms.wi ...
- Java写Excel(不生成实体文件,写为流的形式)
java 写 Excel(不生成实体文件,写为流的形式) public String exportReportExcel(String mediaCode, List<SimpleMediaRe ...
- 20190105-打印字母C,H,N,口等图像和杨辉三角
1. 打印字母C ****** * * * * ****** def print_c(n): print('*' * n) for i in range(n): print('* ') print(' ...
- Python学习手册之Python异常和文件
在上一篇文章中,我们介绍了 Python 的函数和模块,现在我们介绍 Python 中的异常和文件. 查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/9963 ...
- Mongoose模式的扩展
模式的扩展 默认值 默认值的类型: 固定值.即使生成 代码展示: var mongoose = require('mongoose');mongoose.connect('mongodb://loca ...
- FIFO的使用场景
(1) 数据的缓冲.如模型图所示,如果数据的写入速率高,但间隔大,且会有突发;读出速率小,但相对均匀.则通过设置相应深度的FIFO,可以起到数据暂存的功能,且能够使后续处理流程平滑,避免前级突发时,后 ...
- Java8新特性(一)——Lambda表达式与函数式接口
一.Java8新特性概述 1.Lambda 表达式 2. 函数式接口 3. 方法引用与构造器引用 4. Stream API 5. 接口中的默认方法与静态方法 6. 新时间日期 API 7. 其他新特 ...
- Plsql developer 怎么在打开时登陆配置oracel client?
配置前 logon 这块是空白的,该怎么配置呢? 看下面 --> 安装完plsql 后 需要安装 oracle client, 这里不再赘述,请自行百度.下面将贴出如何使用 oracle cli ...
- 浅析express以及express中间件
一.express: 1.express: Express是什么? Express是基于node.js平台的web应用开发框架: 作用:可以实现快速搭建骨架: 优点:开发web应用更加方便,更加快捷. ...