洛谷P4550 【收集邮票】

题目链接:

神仙题QAQ

题目分析:

概率期望题是不可能会的,一辈子都不可能会的QAQ
这个题也太仙了
首先明确一下题意里面我感觉没太说清楚的地方,这里是抽到第\(i\)次要\(i\)元钱,不是抽到第\(i\)不然就是一眼题了

我们定义两个数组,\(f[i]\)\(g[i]\),分别表示现在取到第\(i\)张,要取完剩下的期望次数,以及现在取到第\(i\)张,要取完剩下的期望价格
对于\(f[i]\),首先显然\(f[n] = 0\), 然后考虑如何转移
抽一次有两种情况,抽到有的和没有的,抽到已经有的概率是\(\frac{i}{n}\),期望是\(\frac{i}{n} * f[i]\),抽到没有的概率是\(\frac{n - i}{n}\),期望是\(\frac{n-i}{n} * f[i + 1]\),然后算上自己的期望为\(1\)
于是有状态转移方程:\(f[i] = \frac{i}{n} * f[i] + \frac{n-i}{n} * f[i + 1] + 1\)
化简一下得到\(f[i] = f[i + 1] + \frac{n}{n - i}\)


博主要从机房回家了QAQ回去继续写

好我回家了,继续


对于\(g[i]\),首先显然\(g[n] = 0\), 然后考虑如何转移
抽一次有两种情况,抽到有的和没有的,抽到已经有的概率是\(\frac{i}{n}\),期望是\(\frac{i}{n} * (g[i] + f[i] + 1)\),抽到没有的概率是\(\frac{n - i}{n}\),期望是\(\frac{n-i}{n} * (g[i + 1] + f[i + 1] + 1)\)
于是有状态转移方程:\(g[i] = \frac{i}{n} * (g[i] + f[i] + 1) + \frac{n-i}{n} * (g[i + 1] + f[i + 1] + 1)\)
化简一下得到\(g[i] = \frac{i}{n - i} * f[i] + \frac{n}{n - i} + g[i + 1] + f[i + 1]\)

然后我们先跑\(f\)数组,再用\(f\)数组更新\(g\)数组就\(ok\)

就一个感想,这是怎么想到的,这又是怎么想到的
题还是做太少啦

代码:

#include <bits/stdc++.h>
#define N (10000 + 10)
using namespace std;
inline int read() {
	int cnt = 0, f = 1; char c = getchar();
	while (!isdigit(c)) {if (c == '-') f = -f; c = getchar();}
	while (isdigit(c)) {cnt = (cnt << 3) + (cnt << 1) + c - '0'; c = getchar();}
	return cnt * f;
}
int n;
double f[N], g[N];
signed main() {
	n = read();
	f[n] = 0, g[n] = 0;
	for (register int i = n - 1; ~i; --i) {
		f[i] = f[i + 1] + 1.0 * n / (1.0 * (n - i));
		g[i] = 1.0 * i / (1.0 * (n - i)) * f[i] + 1.0 * n / (1.0 *(n - i)) + g[i + 1] + f[i + 1]; 
	}
	printf("%.2lf", g[0]);
	return 0;
}
posted @ 2019-08-12 17:12  kma_093  阅读(141)  评论(0编辑  收藏  举报