Pre
期望题好神奇。
看题解是必须的。
Solution
\(f[i]\)表示当前有\(i\)种的期望次数。
\(f[i]=\frac{n-i}{n}(f[i+1]+1)+\frac{i}{n}(f[i]+1)\)
解得
\(f[i]=f[i+1]+\frac{n}{n-i}\)
\(g[i]\)表示当前有\(i\)种的期望价格。
\(g[i]=\frac{i}{n}(g[i]+f[i]+1)+\frac{n-i}{n}(g[i+1]+f[i+1]+1)\)
解得
\(g[i]=g[i+1]+\frac{i}{n-i}f[i]+f[i+1]+\frac{n}{n-i}\)
Code
#include<bits/stdc++.h>
using namespace std;
const int N = 10000 + 5;
int n;
double f[N], g[N];
int main () {
scanf ("%d", &n);
for (int i = n - 1; i >= 0; --i) {
f[i] = f[i + 1] + 1.00 * n / (1.00 * n - i);
g[i] = g[i + 1] + (i * 1.00 / (1.00 * n - i) * f[i]) + f[i + 1] + (1.00 * n / (1.00 * n - i));
}
printf ("%.2lf\n", g[0]);
return 0;
}
Conclusion
解方程的思维很巧妙,也就是说构造难度远大于代码难度。。。
此所谓数论题。