ABC G n8 求卡常

学术版

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,我 n^9 过了


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

可能可以尝试上界卡紧一点?我把 dp 数组不为 0 的最大 m 记录下来就只跑了 0.9 秒 /kel link


by 幸存者 @ 2025-01-18 22:31:11

@Register_int 把 dp 值为 0 的 continue 掉试试


by Register_int @ 2025-01-18 22:57:49

解决了,我糖丸了。


|