【BZOJ2070】列队春游———[组合数学+概率DP]
数学渣滓不可做の题OTZ
Description
(单身人士不可做
Input | Output
3 | 4.33
1 2 3 |
Solutoin
1.O(n3)暴力算法:
无脑暴力可以枚举身高+位置+长度算期望再加和,O(n3)的复杂度,目测会T (所以根本没敢尝试
2.O(n2)优化算法:
然后会发现不同位置相同长度会产生很多重复计算,所以改为可以改为不枚举位置,直接计算每一长度的概率。
令s是比某小朋友身高矮的人数,那么对于长度l,该小朋友的概率为s/(n-1)*(s-1)/(n-2)...*(s-L+1)/(n-L)。 O(n2)解决。
3.O(n)数学算法:
最终答案为小朋友期望视野的总和,根据期望的线性性,答案可化为所有可能视野的期望值。即:
ans=∑i*p(l=i) (i>=1且i<=n)可巧妙转化为
ans=∑p(l>=i) (i>=1且i<=n)
对于p(l>=i),令k为可能挡住当前小朋友的人数,考虑当前小朋友身前必须至少有i-1个比他矮的小朋友,因此他可站的位置有n-i+1个;k位挡视野的小朋友不能站在这i-1个位置,因此只能在剩下n-i个位置中选择。然后考虑小朋友自己和挡视野的人在n个位置中排列的合法情况,相除,就是p(l>=i)。
p(l>=i)=(n-i+1)*A(k,n-i)/A(k+1,n).
然后进行一通猛如虎的操作,最后可得一个神奇的O(1)式子。
p(l>=i)=(n+1)/(k+2).
具体推导过程见不认识的dalao的博客 传送门
O(n)的代码:
#include<bits/stdc++.h>
using namespace std;
int n,h[1001],k[1001];
double ans;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
void write(int x)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(x>9)
write(x/10);
putchar(x%10+'0');
}
int main()
{
n=read();
memset(k,-1,sizeof(k));
for(int i=1;i<=n;i++)
{
int x=read();
h[x]=h[x]+1;
}
for(int i=1;i<=1000;i++)
for(int j=1;j<=i;j++)
k[j]+=h[i];
for(int i=1;i<=1000;i++)
if(h[i])
ans+=(double)h[i]*(n+1)/(k[i]+2);
printf("%.2lf",ans);
return 0;
}
【BZOJ2070】列队春游———[组合数学+概率DP]的更多相关文章
- 【bzoj5004】开锁魔法II 组合数学+概率dp
题目描述 有 $n$ 个箱子,每个箱子里有且仅有一把钥匙,每个箱子有且仅有一把钥匙可以将其打开.现在随机打开 $m$ 个箱子,求能够将所有箱子打开的概率. 题解 组合数学+概率dp 题目约定了每个点的 ...
- bzoj2720: [Violet 5]列队春游(概率期望+组合数学)
Description Input Output Sample Input Sample Output HINT 数学题都这么骚的么……怎么推出来的啊……我是真的想不出来…… 首先,要算总的视 ...
- 【整理】简单的数学期望和概率DP
数学期望 P=Σ每一种状态*对应的概率. 因为不可能枚举完所有的状态,有时也不可能枚举完,比如抛硬币,有可能一直是正面,etc.在没有接触数学期望时看到数学期望的题可能会觉得很阔怕(因为我高中就是这么 ...
- CF_229E_Gift_概率DP+组合数学
CF_229E_Gift_概率DP+组合数学 题目描述: 很久很久以前,一位老人和他的妻子住在蔚蓝的海边.有一天,这位老人前去捕鱼,他捉到了一条活着的金鱼.鱼说:“噢,老渔人!我祈求你放我回到海里,这 ...
- Codeforces 28C [概率DP]
/* 大连热身D题 题意: 有n个人,m个浴室每个浴室有ai个喷头,每个人等概率得选择一个浴室. 每个浴室的人都在喷头前边排队,而且每个浴室内保证大家都尽可能均匀得在喷头后边排队. 求所有浴室中最长队 ...
- HDU 4405 Aeroplane chess (概率DP)
题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i 这个位置到达 n ...
- POJ 2096 Collecting Bugs (概率DP)
题意:给定 n 类bug,和 s 个子系统,每天可以找出一个bug,求找出 n 类型的bug,并且 s 个都至少有一个的期望是多少. 析:应该是一个很简单的概率DP,dp[i][j] 表示已经从 j ...
- POJ 2151 Check the difficulty of problems (概率DP)
题意:ACM比赛中,共M道题,T个队,pij表示第i队解出第j题的概率 ,求每队至少解出一题且冠军队至少解出N道题的概率. 析:概率DP,dp[i][j][k] 表示第 i 个队伍,前 j 个题,解出 ...
- 概率DP light oj 1030
t组数据 n块黄金 到这里就捡起来 出发点1 到n结束 点+位置>n 重掷一次 dp[i] 代表到这里的概率 dp[i]=(dp[i-1]+dp[i-2]... )/6 如果满6个的话 否则 ...
随机推荐
- 解析Prometheus PromQL
解析PromQL 目前对Prometheus 的promQL 的解析文章比较少,且Prometheus官方也没有提供一个公共的库来对齐进行解析.下面实现对promQL的解析,并实现注入label功能. ...
- 下载excel(接收文件流)
/** * 文件流转换 主要代码块,可自定义下载文件名称 * @param {} data */ export function download(data, titName) { if ( ...
- 改Jupyter Notebook的默认工作路径?
如何更改Jupyter Notebook的默认工作路径? 1.在cmd中输入命令使Jupyter产生配置文件:Jupyter_notebook_config.py jupyter notebook - ...
- Jmeter扩展组件开发(10) - 自定义扩展函数助手的开发
CODE package com.functions;import org.apache.jmeter.engine.util.CompoundVariable;import org.apache.j ...
- Shell系列(15)- 数值运算方法
数值运算-方法1 declare -i [root@localhost ~]# aa=11 [root@localhost ~]# aa=22 #给变量aa和bb赋值 [root@localhos ...
- centos虚拟机中挂新硬盘
配置一台centos7,主硬盘20G装系统:副硬盘20G作为数据盘(格式:XFS)挂载到根目录:/vdir/ ,XFS是高性能文件系统. 外层vm硬盘添加好后,执行下面 1.fdisk -l //查看 ...
- 对OOP的理解
OOP是面向对象编程Object Oriented Programming,特征分别是封装.继承.多态.抽象. 封装:封装是指将对象信息状态通过访问权限修饰符隐藏在对象内部,不允许外部程序直接访问,如 ...
- Kafka 性能篇:为何 Kafka 这么快?
『码哥』的 Redis 系列文章有一篇讲透了 Redis 的性能优化 --<Redis 核心篇:唯快不破的秘密>.深入地从 IO.线程.数据结构.编码等方面剖析了 Redis " ...
- robot framework使用SeleniumLibrary打开谷歌浏览器无头模式
注:我百度了一圈并没有发现类似的教程 robot framework的seleniumLibrary一般打开浏览器的方式是用关键字 Open Browser 但是,阅读seleniumLibrary ...
- MySQL8.0.20安装教程,MySQL8.0.20安装详细图文教程
1.下载链接如下: MySQL8.0.20版本 https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-20.html 其他版本:MySQL8 ...