直接组合数无奈超时Orz
去网上看了个题解 好厉害Orz
推导要把组合数写成阶乘才行
#include <cstdio>
#include <algorithm>
#define SF scanf
#define PF printf
using namespace std;
int n;
const int MAXN = 100000;
double d[MAXN+10];
int main()
{
// d[i] = C(n-2, (n-2) / 2) / 2 ^ (n-2)
// d[n] / d[n-2] = (n - 3) / (n - 2)
d[2] = 1;
for(int i = 4; i <= MAXN; i += 2) d[i] = d[i-2] * (i - 3) / (i - 2);
int T; SF("%d", &T); while(T--) {
SF("%d", &n);
PF("%.4lf\n", 1 - d[n]);
}
}
本文介绍了一种通过递推公式计算特定组合数的方法,避免了直接使用组合数导致的时间复杂度过高问题。通过将组合数表达为阶乘的形式,并利用递推思想进行优化,实现了高效的计算。
204

被折叠的 条评论
为什么被折叠?



