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


6月份做的這道題,今天再看,發現有些地方的理解是錯的,修改了一下發了上來。

Des

\(n\) 種不同的郵票,皮皮想收集所有種類的郵票。唯一的收集方法是到同學凡凡那里購買,每次只能買一張,並且買到的郵票究竟是 \(n\) 種郵票中的哪一種是等概率的,概率均為 \(1/n\)。但是由於凡凡也很喜歡郵票,所以皮皮購買第 \(k\) 次郵票需要支付 \(k\) 元錢。

現在皮皮手中沒有郵票,皮皮想知道自己得到所有種類的郵票需要花費的錢數目的期望。

\(\texttt{Data Range:}\)

\(N\le 10^4\)

Sol

\(f(k)\) 表示買到 \(k\) 張不同郵票的期望次數,\(f(k)=\sum p_jn_j\),則費用 \(g(k)\)

\[\sum p_j\frac {(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\),則

\[\begin{align*} f(k)&=\frac{n-k+1}n\sum 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*} \]

同理,

\[\begin{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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM