Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
26968 | gaochunzhen | 【BJ】T3 | C++ | 运行超时 | 95 | 1956 MS | 2548 KB | 1529 | 2024-02-27 21:19:30 |
#include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 1e5 + 9, M = 321, Mod = 998244353; int fpow(int a, int b = Mod - 2) { int res = 1; while (b) { if (b & 1) res = 1ll * res * a % Mod; a = 1ll * a * a % Mod, b >>= 1; } return res; } int n, m, K, f[2][M][M], g[2][M][M], fl; signed main() { scanf("%d%d%d", &n, &m, &K); if (n >= m) { printf("0\n"); return 0; } f[0][0][0] = 1; for (int i = 0; i < m; i++) { fl ^= 1; for (int j = 0; j <= n; j++) { for (int k = 0; k <= n; k++) f[fl][j][k] = g[fl][j][k] = 0; } for (int j = 0; j <= n; j++) { for (int k = 0; k <= j; k++) { (f[fl][j][k] += f[fl ^ 1][j][k]) %= Mod; (f[fl][j + 1][k] += f[fl ^ 1][j][k]) %= Mod; (f[fl][j][k + 1] += f[fl ^ 1][j][k]) %= Mod; (f[fl][j + 1][k + 1] += f[fl ^ 1][j][k]) %= Mod; (g[fl][j][k] += g[fl ^ 1][j][k]) %= Mod; (g[fl][j + 1][k] += g[fl ^ 1][j][k]) %= Mod; (g[fl][j][k + 1] += g[fl ^ 1][j][k]) %= Mod; (g[fl][j + 1][k + 1] += g[fl ^ 1][j][k]) %= Mod; } } for (int j = 0; j <= n; j++) { for (int k = 0; k <= j; k++) { g[fl][j][k] = (g[fl][j][k] + 1ll * fpow(j - k, K) * f[fl][j][k]) % Mod; } } } printf("%d\n", g[fl][n][n]); return 0; }