AcWing 317. 陨石的秘密

2021-03-17 17:26

阅读:662

标签:==   main   return   str   c++   mat   std   continue   初始   

1 -> {}
2 -> []
3 -> ()

\(f[d][a][b][c]\)
表示 \([i * 2 - 1, j * 2]\) 这段区间 深度为 d
\(1\)\(a\) 个, \(2\)\(b\) , \(3\)\(c\)

初始状态
\(f[1][0][0][1] = 1;\)
\(f[1][0][1][0] = 1;\)
\(f[1][1][0][0] = 1;\)

操作1:用 () 括起来
需满足: \(a = 0\)\(b = 0\)
\(f[d][a][b][c] += f[d - 1][a][b][c - 1]\)

操作2:用 [] 括起来
需满足:\(a = 0\)
\(f[d][a][b][c] += f[d - 1][a][b - 1][c]\)

操作3:用 {} 括起来
\(f[d][a][b][c] += f[d - 1][a - 1][b][c]\)

合并 (枚举第一个括号)

#include 
#include 
using namespace std;
const int S = 35, L = 11, P = 11380;
int L1, L2, L3, D, f[S][L][L][L], s[S][L][L][L];
int main() {
    scanf("%d%d%d%d", &L1, &L2, &L3, &D);
    s[0][0][0][0] = f[0][0][0][0] = 1;
    for (int d = 1; d = 2) (f[d][a][b][c] += s[d - 2][a1 - 1][b1][c1] * f[d][a - a1][b - b1][c - c1]) %= P;
                                    (f[d][a][b][c] += f[d - 1][a1 - 1][b1][c1] * s[d][a - a1][b - b1][c - c1]) %= P;
                                } else if (b1) {
                                    if (d >= 2) (f[d][a][b][c] += s[d - 2][a1][b1 - 1][c1] * f[d][a - a1][b - b1][c - c1]) %= P;
                                    (f[d][a][b][c] += f[d - 1][a1][b1 - 1][c1] * s[d][a - a1][b - b1][c - c1]) %= P;
                                } else {
                                    if (d >= 2) (f[d][a][b][c] += s[d - 2][a1][b1][c1 - 1] * f[d][a - a1][b - b1][c - c1]) %= P;
                                    (f[d][a][b][c] += f[d - 1][a1][b1][c1 - 1] * s[d][a - a1][b - b1][c - c1]) %= P;
                                }
                            }
                        }
                    }
                    s[d][a][b][c] = (s[d - 1][a][b][c] + f[d][a][b][c]) % P;
                }
                
            }
        }
    }
    printf("%d\n", f[D][L1][L2][L3]);
    return 0;
}

AcWing 317. 陨石的秘密

标签:==   main   return   str   c++   mat   std   continue   初始   

原文地址:https://www.cnblogs.com/dmoransky/p/12380388.html


评论


亲,登录后才可以留言!