题意:给定一个很优美的三角形,问从第1层走到第N层的走法有多少种?
解法:由于每一层能够向左右行走到任意位置再向下走,所以设f[i]为从第一层到第 i 层的方案数,则有递推关系f[i] = f[i-1] * 2 * i。由于最后的结果是对1000003取余,所以1000003之后的结果一定都为零。
代码如下:
#include <cstdlib> #include <cstring> #include <cstdio> #include <iostream> #include <algorithm> #include <set> using namespace std; const int MOD = 1000003; long long N; int f[1000005]; void pre() { f[1] = 2; for (int i = 2; i <= 1000003; ++i) { f[i] = (1LL * f[i-1] * 2 * i) % MOD; } } int main() { int T; pre(); scanf("%d", &T); while (T--) { scanf("%I64d", &N); if (N < 1000003) { printf("%d\n", f[N]); } else { puts("0"); } } return 0; }