题目:

洛谷1654

分析:

本人数学菜得要命,这题看了一整天才看明白……

先说说什么是“期望”。不太严谨地说,若离散型随机变量(可以看作“事件”)\(X\)取值为\(x_i\)的概率为\(p_i\),则它的期望\(E(X)\)为:

\[E(X)=\sum_i x_ip_i
\]

(下面大段胡扯可以跳过)

举个例子:Monster of the Mouth设计了一款游戏,从某知名OIer兔崽子2018年9月21日-22日在BZOJ上的提交记录中随机抽一个,如果是AC则Inspector_Javert请兔崽子吃九根烤肠,否则兔崽子请Inspector_Javert吃三根烤肠,Inspector_Javert期望吃到多少根烤肠?

首先我们看一眼兔崽子的提交记录,发现他在这两天内提交了\(12\)次,其中\(2\)次AC,\(4\)次CE,\(3\)次MLE,\(1\)次TLE,\(1\)次WA,\(1\)次RE (印证了那句名言:AC率这么低/CE率这么高一定是用提交框写代码的兔崽子)

那么Inspector_Javert损失九根烤肠的概率\(P(-9)=\frac{2}{12}=\frac{1}{6}\)

Inspector_Javert得到三根烤肠的概率\(P(3)=\frac{4+3+1+1+1}{12}=\frac{5}{6}\)

则期望\(E(X)=-9*\frac{1}{6}+3*\frac{5}{6}=1\)

所以Inspector_Javert期望吃到\(1\)根烤肠

说成人话,平均每玩一次Inspector_Javert就能得到一根烤肠。如果Inspector_Javert和兔崽子玩了\(n\)次,当\(n\)趋于正无穷时,Inspector_Javert比兔崽子多吃到烤肠的数量趋于\(n\)

(烤肠真香)

期望有一个很重要的性质:线性性。即对于两个随机变量\(X\)和\(Y\),存在

\[E(X+Y)=E(X)+E(Y)
\]

继续上面的例子:如果Inspector_Javert和另一个知名OIer小恐龙也玩了上面的那个游戏,那么如果\(X\)表示Inspector_Javert多吃的烤肠总数,\(X_1\)表示比兔崽子多吃的烤肠数,\(X_2\)表示比小恐龙多吃的烤肠数,则

\[E(X)=E(X_1)+E(X_2)
\]

人话:比两个OIer多吃的=比兔崽子多吃的+比小恐龙多吃的(这个很显然吧)

(然而小恐龙AC率爆表导致Inspector_Javert期望损失惨重……qwq)

言归正传,来冷静分析这道题的一个弱化版:得分是极长'1'串的长度,而非长度的立方。首先肯定能想到dp,用\(f_i\)表示前\(i\)个位置的期望得分。同时,用\(g_i\)表示以\(i\)结尾的极长'1'串的长度的期望,\(p_{i,j}\)表示以\(i\)结尾的极长'1'串长为\(j\)的概率。输入数据记作\(p'_i\),\(p'_0=0\)

注意此处以\(i\)结尾的极长'1'串的定义为满足位置\((j-1)\)的数为\(0\)的全'1'串\([j,i]\)(即不考虑位置\(i\)后面的情况)

显然有\(p_{i,j}=p_{i-1,j-1}*p'_i\),\(p_{i,0}=1-p'_i\)

由期望的定义可得

\[g_i=\sum_{k=0}^i p_{i,k}*k=\sum_{k=1}^i p_{i,k}*k
\]

\[g_{i-1}=\sum_{k=0}^{i-1} p_{i-1,k}*k
\]

给下面的式子乘上\(p'_i\),就得到

\[\begin{aligned}
g_{i-1}*p'i & =\sum_{k=0}^{i-1} p_{i,k+1}*k\\
&=\sum_{k=1}^{i} p_{i,k}*(k-1)\\
&=\sum_{k=1}^{i} p_{i,k}*k-\sum_{k=1}^{i} p_{i,k}\\
\end{aligned}
\]

可以发现第一项就是\(g_i\),而\(\sum_{k=1}^{i}p_{i,k}\)就等于\(p'_i\)(因为所有\(p_{i,k}\)不重不漏地包含了位置\(i\)为\(1\)的所有情况)。于是我们得到一个递推式:

\[g_i=p'_i*(g_{i-1}+1)
\]

根据期望的线性性,前\(i\)点的期望得分=前\(i-1\)点的期望得分+\(i\)点的期望得分(也就是长度)

所以DP方程就是\(f_i=f_{i-1}+g_i\)?

恭喜你gg了

注意,当\(i\)点为\(1\)时,以\(i-1\)结尾的'1'串不再是“极长”的(这里“极长”是题目中的定义而非上文中的定义),它们不再作出贡献。所以事实上如果\(i\)点为\(1\),我们有\(p'_i\)的概率获得\(g_{i-1}\)的损失,也就是说期望损失为\(p'_i*g_{i-1}\)

所以DP方程应该是

\[f_i=f_{i-1}+g_i-g_{i-1}*p'_i
\]

现在考虑,如果得分是极长'1'串长度的平方呢?(注意期望的平方不等于平方的期望)我们记以\(i\)结尾的极长'1'串长度的平方为\(g'_i\),同理可得

\[g'_i=\sum_{k=0}^i p_{i,k}*k^2=\sum_{k=1}^i p_{i,k}*k^2
\]

那么

\[\begin{aligned}
g'_{i-1}*p'_i&=\sum_{k=0}^{i-1}p_{i,k+1}*k^2\\
&=\sum_{k=1}^ip_{i,k}*(k-1)^2\\
&=\sum_{k=1}^ip_{i,k}*(k^2-2k+1)\\
&=g'_i-2g_i+p'_i
\end{aligned}
\]

得到递推式

\[\begin{aligned}
g'_i&=g'_{i-1}*p'_i+2g_i-p'_i\\
&=g'_{i-1}*p'_i+2(g_{i-1}+1)*p'_i-p'_i\\
&=p'_i*(g'_{i-1}+2g_{i-1}+1)
\end{aligned}
\]

那么最终的DP方程就是(和上面的几乎一模一样)

\[f_i=f_{i-1}+g'_i-g'_{i-1}*p'_i
\]

得分是长度三次方的情况(原题)和平方的情况非常相似,读者可以自行脑补。

代码:

说了这么多,代码其实非常短……

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <iomanip>
using namespace std;
namespace zyt
{
const int N = 1e5 + 10;
double f[N], g[N][3];
int work()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
double p;
cin >> p;
g[i][0] = p * (g[i - 1][0] + 1);
g[i][1] = p * (g[i - 1][1] + g[i - 1][0] * 2 + 1);
g[i][2] = p * (g[i - 1][2] + 3 * g[i - 1][1] + 3 * g[i - 1][0] + 1);
f[i] = f[i - 1] + g[i][2] - g[i - 1][2] * p;
}
cout.setf(ios::fixed);
cout << setprecision(1) << f[n];
return 0;
}
}
int main()
{
return zyt::work();
}

【洛谷1654/BZOJ4318】OSU!(期望DP)的更多相关文章

  1. 洛谷P3600 随机数生成器(期望dp 组合数)

    题意 题目链接 Sol 一条重要的性质:如果某个区间覆盖了另一个区间,那么该区间是没有用的(不会对最大值做出贡献) 首先不难想到枚举最终的答案\(x\).这时我们需要计算的是最大值恰好为\(x\)的概 ...

  2. 洛谷P3600随机数生成器——期望+DP

    原题链接 写到一半发现写不下去了... 所以orz xyz32768,您去看这篇题解吧,思路很清晰,我之前写的胡言乱语与之差距不啻天渊 #include <algorithm> #incl ...

  3. 洛谷 P5279 - [ZJOI2019]麻将(dp 套 dp)

    洛谷题面传送门 一道 dp 套 dp 的 immortal tea 首先考虑如何判断一套牌是否已经胡牌了,考虑 \(dp\)​​​​​.我们考虑将所有牌按权值大小从大到小排成一列,那我们设 \(dp_ ...

  4. 【BZOJ4318】OSU! 期望DP

    [BZOJ4318]OSU! Description osu 是一款群众喜闻乐见的休闲软件.  我们可以把osu的规则简化与改编成以下的样子:  一共有n次操作,每次操作只有成功与失败之分,成功对应1 ...

  5. 洛谷2344 奶牛抗议(DP+BIT+离散化)

    洛谷2344 奶牛抗议 本题地址:http://www.luogu.org/problem/show?pid=2344 题目背景 Generic Cow Protests, 2011 Feb 题目描述 ...

  6. Lightning Conductor 洛谷P3515 决策单调性优化DP

    遇见的第一道决策单调性优化DP,虽然看了题解,但是新技能√,很开森. 先%FlashHu大佬,反正我是看了他的题解和精美的配图才明白的,%%%巨佬. 废话不多说,看题: 题目大意 已知一个长度为n的序 ...

  7. 洛谷P1541 乌龟棋(四维DP)

    To 洛谷.1541 乌龟棋 题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游 ...

  8. 【洛谷】P1052 过河【DP+路径压缩】

    P1052 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙 ...

  9. 【题解】洛谷P1052 [NOIP2005TG] 过河(DP+离散化)

    题目来源:洛谷P1052 思路 一开始觉得是贪心 但是仔细一想不对 是DP 再仔细一看数据不对 有点大 如果直接存下的话 显然会炸 那么就需要考虑离散化 因为一步最大跳10格 那么我们考虑从1到10都 ...

随机推荐

  1. Vue.Draggable实现拖拽效果(采坑小记)

    之前有写过Vue.Draggable实现拖拽效果(快速使用)(http://www.cnblogs.com/songdongdong/p/6928945.html)最近项目中要用到这个拖拽的效果,当产 ...

  2. F - Shooter

    UVA___10535 The shooter is in a great problem. He is trapped in a “2D” maze with a laser gun and can ...

  3. [ural1057][Amount of Degrees] (数位dp+进制模型)

    Discription Create a code to determine the amount of integers, lying in the set [X; Y] and being a s ...

  4. [bzoj1925][Sdoi2010][地精部落] (序列动态规划)

    Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...

  5. @requestbody---接受前端传json对象并绑定javabean

    @requestbody---接受前端传json对象并绑定javabean----https://blog.csdn.net/ljxbbss/article/details/74452326 最近代码 ...

  6. 【ZJOI2017 Round2练习】

    ………………………………………………………………………… DAY1:听说是湖南的题 T1:spaly?毫无想法,写个暴力压压惊 T2:尼克杨问号脸 T3:FFT我不会啊,70points已经尽力了

  7. 网上的仿QQ验证码,详细使用方法

    struts2的配置 和代码 1.生成图片流 类名:VerifyCodeUtils /** * 生成图片流 * @author Administrator * */ import java.awt.C ...

  8. vijos 1237 隐形的翅膀

    隐形的翅膀 背景 小杉终于进入了天堂.他看到每个人都带着一双隐形翅膀,他也想要. (小杉是怎么看到的?……) 描述 天使告诉小杉,每只翅膀都有长度,两只翅膀的长度之比越接近黄金分割比例,就越完美. 现 ...

  9. CSS filter 模拟黑洞照片效果

    今天被世界上第一张黑洞照片刷屏. 一整天,哪里都是这张照片.看的多了.我就想用css做一个吧. 建议在chrome上查看. 访问地址:http://suohb.com/work/blankHole.h ...

  10. 此人牛b,学习榜样

    http://liyangliang.me/about/ ------------------------------------------------------------2017年11月12日 ...