LuoguP4550:收集邮票

本文介绍了一种解决特定类型数学期望问题的方法,并通过具体的公式推导和C++代码实现了该解法。讨论了如何求解不同状态下的期望次数与价格,并分析了其背后的数学原理。

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

解方程的思维很巧妙,也就是说构造难度远大于代码难度。。。

此所谓数论题。

转载于:https://www.cnblogs.com/ChiTongZ/p/11217472.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值