1 条题解

  • 1
    @ 2022-7-21 21:05:31
    #include <bits/stdc++.h>
    
    #define MOD 11380
    
    using namespace std;
    
    int L1, L2, L3, D;
    int f[15][15][15][35];
    
    int main()
    {
    scanf("%d%d%d%d", &L1, &L2, &L3, &D);
    for (int i = 0; i <= D; i++) f[0][0][0][i] = 1;
    for (int l1 = 0; l1 <= L1; l1++)
    for (int l2 = 0; l2 <= L2; l2++)
    for (int l3 = 0; l3 <= L3; l3++)
    for (int d = 1; d <= D; d++) {
    if (l1) f[l1][l2][l3][d] = (f[l1][l2][l3][d] + f[l1 - 1][l2][l3][d - 1]) % MOD;
    if (!l1 && l2) f[l1][l2][l3][d] = (f[l1][l2][l3][d] + f[l1][l2 - 1][l3][d - 1]) % MOD;
    if (!l1 && !l2 && l3) f[l1][l2][l3][d] = (f[l1][l2][l3][d] + f[l1][l2][l3 - 1][d - 1]) % MOD;
    for (int i = 1; i <= l1; i++)
    for (int j = 0; j <= l2; j++)
    for (int k = 0; k <= l3; k++) {
    int tmp = f[l1 - i][l2 - j][l3 - k][d];
    if (i == l1 && j == l2 && k == l3) tmp = (tmp - 1 + MOD) % MOD;
    f[l1][l2][l3][d] = (f[l1][l2][l3][d] + f[i - 1][j][k][d - 1] * tmp) % MOD;
    }
    for (int j = 1; j <= l2; j++)
    for (int k = 0; k <= l3; k++) {
    int tmp = f[l1][l2 - j][l3 - k][d];
    if (l1 == 0 && j == l2 && k == l3) tmp = (tmp - 1 + MOD) % MOD;
    f[l1][l2][l3][d] = (f[l1][l2][l3][d] + f[0][j - 1][k][d - 1] * tmp) % MOD;
    }
    for (int k = 1; k <= l3; k++) {
    int tmp = f[l1][l2][l3 - k][d];
    if (l1 == 0 && l2 == 0 && k == l3) tmp = (tmp - 1 + MOD) % MOD;
    f[l1][l2][l3][d] = (f[l1][l2][l3][d] + f[0][0][k - 1][d - 1] * tmp) % MOD;
    }
    }
    if (!D) printf("%d\n", f[L1][L2][L3][D]);
    else printf("%d\n", (f[L1][L2][L3][D] - f[L1][L2][L3][D - 1] + MOD) % MOD);
    return 0;
    }
    
    
    • 1

    信息

    ID
    4617
    时间
    1000ms
    内存
    64MiB
    难度
    5
    标签
    递交数
    2
    已通过
    2
    上传者