1 条题解
-
1
#include <cstdio> // 以下定义只是为了好看 #define i32 int #define i64 long long #define u32 unsigned int #define u64 unsigned long long const int MAXN = 3e3, MAXK = MAXN / 3; int N, K, P; i64 dp[MAXN + 5][MAXK + 5]; int main() { scanf("%d %d %d", &N, &K, &P); dp[0][0] = 1 % P; for (int i = 1; i <= N; i++) { for (int j = K; j >= 1; j--) { dp[i][j] = dp[i - 1][j] * (i - 1) % P; if (i >= 3) dp[i][j] += dp[i - 3][j - 1] * (i - 1) % P * (i - 2) % P; dp[i][j] %= P; } } printf("%lld\n", dp[N][K]); return 0; }
- 1
信息
- ID
- 4465
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 3
- 已通过
- 2
- 上传者