【题解】P1291 百事世界杯之旅 - 期望dp
P1291 [SHOI2002]百事世界杯之旅
声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。
题目描述
“……在 \(2002\) 年 \(6\) 月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字。只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯。还不赶快行动!”
你关上电视,心想:假设有 \(n\) 个不同的球星名字,每个名字出现的概率相同,平均需要买几瓶饮料才能凑齐所有的名字呢?
输入格式
整数 \(n(2≤n≤33)\) ,表示不同球星名字的个数。
输出格式
输出凑齐所有的名字平均需要买的饮料瓶数。如果是一个整数,则直接输出,否则应该直接按照分数格式输出,例如五又二十分之三应该输出为(复制到记事本):\(5\dfrac{3}{20}\)
第一行是分数部分的分子,第二行首先是整数部分,然后是由减号组成的分数线,第三行是分母。减号的个数应等于分母的为数。分子和分母的首位都与第一个减号对齐。
分数必须是不可约的。
Solution
第一道期望 \(dp\) ,虽然说很水 但还是用了一些时间才弄懂的...
设目前已经拿了 \(i\) 个球星(由于球星是无序的,所以先拿后拿没区别),现在由 \(f_i\) 来推 \(f_{i+1}\)
则下一个瓶子能抽到不属于已拿的 \(i\) 个球星的概率为 \(\dfrac{n-i}{n}\)
下下个瓶子能抽到的概率,则是要求在下一个时抽到属于已拿 \(i\) 个中的瓶子,于是概率为 \(\dfrac{i}{n} * \dfrac{n - i}{n}\)
下下下个概率为 \(\left(\dfrac{i}{n}\right)^2*\dfrac{n - i}{n}\)
......
第 \(k\) 个瓶子的概率为 \(\left(\dfrac{i}{n}\right)^{k - 1} * \dfrac{n - i}{n}\)
此时的第 \(k\) 次为极限状态,无穷大次
则期望 \(E=1 * \dfrac{n-i}{n} + 2 * \dfrac{i}{n} * \dfrac{n - i}{n} + 3 * \left(\dfrac{i}{n}\right)^2*\dfrac{n - i}{n} + ... + k * \left(\dfrac{i}{n}\right)^{k - 1} * \dfrac{n - i}{n}\)
将式子两边乘以 \(\dfrac{i}{n}\) 得
\(\dfrac{i}{n}E= 1 * \dfrac{i}{n} * \dfrac{n - i}{n} + 2 * \left(\dfrac{i}{n}\right)^2*\dfrac{n - i}{n} + ... + k * \left(\dfrac{i}{n}\right)^{k} * \dfrac{n - i}{n}\)
两式错位相减再将等式两边乘以 \(\dfrac{n - i}{n}\) 得
\(E=1 + \dfrac{i}{n} + \left(\dfrac{i}{n}\right) ^ 2 + ... + \left(\dfrac{i}{n}\right) ^ k\)
有等比数列求和公式 \(\dfrac{a_1(1 - q^n)}{1 - q}\) 得
\(E=\left(\dfrac{n}{n - i}\right)\)
即 \(f_{i + 1} = f_i + \left(\dfrac{n}{n - i}\right)\)
通过递推合并提项得
\(f_n=n * \left(1 + \dfrac{1}{2} + \dfrac{1}{3} + ... + \dfrac{1}{n}\right)\)
这个式子是不是很漂亮很美观 \(2333\) ,接下来就很简单啦 如果忽略这恶心的输出格式
Code
#include<bits/stdc++.h>
#define ll long long
#define F(i, x, y) for(int i = x; i <= y; ++ i)
using namespace std;
int n;
struct node{
ll a, b;
}ans;
int weishu(ll x)
{
int k = 0;
while(x) x /= 10, ++ k;
return k;
}
ll gcd(ll x, ll y){return (x % y == 0) ? y : gcd(y, x % y);}
int main()
{
scanf("%d", &n);
ans.b = 1;
F(i, 1, n)
{
ans.a = ans.a * i + ans.b, ans.b = ans.b * i;
ll k = gcd(ans.b, ans.a);
ans.a /= k, ans.b /= k;
}
ans.a *= n;
ll k = gcd(ans.b, ans.a);
ans.a /= k, ans.b /= k;
if(ans.b == 1) {printf("%lld\n", ans.a); return 0;}
k = ans.a / ans.b, ans.a -= k * ans.b;
int l1 = weishu(k), l2 = weishu(ans.b);
F(i, 1, l1) printf(" "); printf("%lld\n", ans.a);
if(k) printf("%lld", k);
F(i, 1, l2) printf("-"); printf("\n");
F(i, 1, l1) printf(" "); printf("%lld\n", ans.b);
return 0;
}
【题解】P1291 百事世界杯之旅 - 期望dp的更多相关文章
- 洛谷P1291 [SHOI2002]百事世界杯之旅(期望DP)
题目描述 “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯.还不赶 ...
- 洛谷P1291 [SHOI2002]百事世界杯之旅——期望DP
题目:https://www.luogu.org/problemnew/show/P1291 水水的经典期望DP: 输出有毒.(其实也很简单啦) 代码如下: #include<iostream& ...
- LUOGU P1291 [SHOI2002]百事世界杯之旅 (期望dp)
传送门 解题思路 期望$dp$.因为这个是期望步数,所以要倒着推.那么这道题就变得一脸可做了,设$f[i]$表示还有$i$张牌没有收集的期望,那么考虑再抽一张,有$(n-i)/n$的概率抽到抽过的牌, ...
- 洛谷P1291 百事世界杯之旅
P1291 百事世界杯之旅 题目描述 “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听, ...
- 洛谷P1291 [SHOI2002]百事世界杯之旅 [数学期望]
题目传送门 百事世界杯之旅 题目描述 “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听, ...
- 洛谷 P1291 [SHOI2002]百事世界杯之旅 解题报告
P1291 [SHOI2002]百事世界杯之旅 题目描述 "--在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽 ...
- 「SHOI2002」「LuoguP1291」百事世界杯之旅(UVA10288 Coupons)(期望,输出
题目描述 “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯.还不赶 ...
- 【Luogu1291】百事世界杯之旅(动态规划,数学期望)
[Luogu1291]百事世界杯之旅(动态规划,数学期望) 题面 洛谷 题解 设\(f[i]\)表示已经集齐了\(i\)个名字的期望 现在有两种方法: 先说我自己的: \[f[i]=f[i-1]+1+ ...
- luogu P1291 [SHOI2002]百事世界杯之旅
题目链接 luogu P1291 [SHOI2002]百事世界杯之旅 题解 设\(f[k]\)表示还有\(k\)个球员没有收集到的概率 再买一瓶,买到的概率是\(k/n\),买不到的概率是\((n-k ...
随机推荐
- 什么是CPU load
最近经常收到告警,CPU load大于阈值告警.查看系统的CPU是12核,告警阈值设置的是8.对于CPU load一直有个模糊的概念,具体是什么意思还真搞不明白,趁这个机会好好搞搞究竟. 1.查看CP ...
- Python第五章-内置数据结构03-元组
Python 内置的数据结构 三.元组(tuple) python 作为一个发展中的语言,也提供了其他的一些数据类型. tuple也是 python 中一个标准的序列类型. 他的一些操作和str和li ...
- TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人。
简介 TensorFlow-Bitcoin-Robot:一个基于 TensorFlow LSTM 模型的 Bitcoin 价格预测机器人. 文章包括一下几个部分: 1.为什么要尝试做这个项目? 2.为 ...
- Linux下的ngnix安装与启动
Linux安装Nginx 1.安装gcc gcc-c++(如新环境,未安装请先安装)$ yum install -y gcc gcc-c++2.安装wget$ yum -y install wget ...
- 写给小白看的入门级 Java 基本语法,强烈推荐
之前写的一篇我去阅读量非常不错,但有一句留言深深地刺痛了我: 培训班学习半年,工作半年,我现在都看不懂你这篇文章,甚至看不下去,对于我来说有点深. 从表面上看,这句话有点讽刺我的文章写得不够通俗易懂的 ...
- Sql练习201908131742
orderdt_jimmy表结构: sql查询: then amount end) t1, then amount end) t2, then amount end) t3 from orderdt_ ...
- C Cow XOR 奶牛异或
时间限制 : 10000 MS 空间限制 : 65536 KB 问题描述 农民约翰在喂奶牛的时候被另一个问题卡住了.他的所有N(1 <= N <= 100,000)个奶牛在他面前排成一 ...
- 使用Putty + Xming 远程登录Linux显示图形化界面
一般我们远程登录linux 服务器,都是使用非加密的 telnet 或者加密的 ssh.这些登录方式有一个特点:只能登录字符界面,不能运行那些带有GUI界面的程序. 有时候为了学习或者工作的需要,我们 ...
- 细数Java项目中用过的配置文件(ini 篇)
Java 菜鸟,会把可变的配置信息写死在代码里:Java 老鸟,会把可变的配置信息提取到配置文件中.坊间流传这么一句非科学的衡量标准,来评判程序员的级别. 那么,项目中的配置信息,你平时都是怎样来实现 ...
- Linux - Ubuntu下执行apt-get update报错:Some index files failed to download. They have been ignored, or old ones used instead.
报错命令 root@ubuntu:/etc/apt# apt-get update Err: http://mirrors.aliyun.com/ubuntu trusty InRelease Cou ...