Register_int @ 2025-01-18 22:04:59
为啥大家的 n8 都能过。/ll
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int mod;
int n, c[436][436], f[31][31][436], dp[31][61][31][436], ans[436];
int main() {
scanf("%d%d", &n, &mod);
for (int i = 0; i <= 435; i++) c[i][0] = 1;
for (int i = 1; i <= 435; i++) {
for (int j = 1; j <= i; j++) c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;
}
for (int i = 1; i <= 30; i++) {
f[0][i][0] = 1;
for (int j = 1; j <= 30; j++) {
for (int k = 1; k <= 435; k++) {
for (int l = 1; l <= i; l++) {
for (int r = 0; r < j; r++) {
if (k >= l + r) f[j][i][k] = (f[j][i][k] + (ll)c[i][l] * c[j - 1][r] % mod * f[j - 1][i][k - l - r]) % mod;
}
}
}
}
}
dp[1][1 + 30][1][0] = 1;
for (int i = 2; i <= n; i++) {
for (int j = 1; j < i; j++) {
for (int k = -i; k <= i; k++) {
if (j - k < -i + j || j - k > i - j) continue;
for (int p = 1; p <= i * (i - 1) / 2; p++) {
int &x = dp[i][k + 30][j][p];
for (int r = 1; r <= i - j; r++) {
for (int l = 1; l <= p; l++) {
x = (x + (ll)c[n - i + j][j] * f[j][r][l] % mod * dp[i - j][j - k + 30][r][p - l]) % mod;
}
}
}
}
}
}
for (int i = n - 1; i <= n * (n - 1) / 2; i++) {
for (int j = 1; j <= n; j++) ans[i] = (ans[i] + dp[n][30][j][i]) % mod;
printf("%d ", ans[i]);
}
}
by EricWan @ 2025-01-18 22:07:36
为啥大家 E 不调都能过。/ll
by Disjoint_cat @ 2025-01-18 22:07:48
bsgm,我
by FLY_lai @ 2025-01-18 22:09:37
同学 n9 跑了 4968ms 过了(
by Disjoint_cat @ 2025-01-18 22:10:34
跑了 3107ms
by sunkuangzheng @ 2025-01-18 22:15:03
可能可以尝试上界卡紧一点?我把
by 幸存者 @ 2025-01-18 22:31:11
@Register_int 把 dp 值为
by Register_int @ 2025-01-18 22:57:49
解决了,我糖丸了。