【题解】P4550 收集邮票(概率期望,平方期望)

6月份做的这道题,今天再看,发现有些地方的理解是错的,修改了一下发了上来。

Des

(n) 种不同的邮票,皮皮想收集所有种类的邮票。唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是 (n) 种邮票中的哪一种是等概率的,概率均为 (1/n)。但是由于凡凡也很喜欢邮票,所以皮皮购买第 (k) 次邮票需要支付 (k) 元钱。

现在皮皮手中没有邮票,皮皮想知道自己得到所有种类的邮票需要花费的钱数目的期望。

( exttt{Data Range:})

(Nle 10^4)

Sol

(f(k)) 表示买到 (k) 张不同邮票的期望次数,(f(k)=sum p_jn_j),则费用 (g(k))

[sum p_jfrac {(1+n_j)(n_j)}{2}=frac{sum p_jn_j+sum p_jn_j^2}{2}=frac{f(k^2)+f(k)}{2} ]

所以需要维护 (f(k^2))(f(k))

(f(k-1)=sum q_jm_j)(f(k)=sum h_qs_q),则

[egin{align*} f(k)&=frac{n-k+1}nsum q_j(m_j+1)+frac{k-1}n(sum h_q(s_q+1))\ &=frac{n-k+1}n(f(k-1)+1)+frac{k-1}n(f(k)+1)\ &=f(k-1)+frac{n}{n-k+1}, end{align*} ]

同理,

[egin{align*} f(k^2)&=frac{n-k+1}{n}sum q_j(m_j+1)^2+frac{k-1}{n}sum h_q(s_q+1)^2\ &=frac{n-k+1}{n}(f(k-1)^2+2f(k-1)+1)+frac{k-1}{n}(f(k^2)+2f(k)+1)\ &=f((k-1)^2)+2f(k-1)+1+frac{k-1}{n-k+1}(2f(k)+1). end{align*} ]

这样就比较轻松的解决了这个问题,关键在于不能将期望 (E(k)) 看做一个整体考虑,而应该写成定义式再做运算。另外就是期望的平方不一定等于平方的期望。

My code

const int N = 1e4 + 5;
int n;
double f[N], f2[N];

int main() {
	#ifndef HRJ
	ios::sync_with_stdio(false); cin.tie(0);
	#endif
	cin >> n;
	for(int i = 1; i <= n; i++) {
		f[i] = f[i - 1] + double(n) / (n - i + 1);
		f2[i] = f2[i - 1] + 2 * f[i - 1] + 1 + double(i - 1) / (n - i + 1) * (2 * f[i] + 1);
	}
	cout << fixed << setprecision(2) << (f[n] + f2[n]) / 2;

    return 0;
}
原文地址:https://www.cnblogs.com/huaruoji/p/p4550.html