1 条题解

  • 0
    @ 2025-7-19 23:25:21

    dpi,j,kdp_{i,j,k} 为走了 kk 步最终到达 (i,j)(i,j) 的合法方案数,直接 DP 并根据走步轨迹转移即可。

    #include <bits/stdc++.h>
    using namespace std;
    int ok[4][2012][2012];
    char f[4][2012], g[2012];
    int main()
    {
        int n, m;
        cin >> n >> m;
        for (int i = 1; i <= 2; i++)
            for (int j = 1; j <= n; j++)
                cin >> f[i][j];
        for (int i = 1; i <= m; i++)
            cin >> g[i];
        for (int i = 1; i <= 2; i++)
            for (int j = 1; j <= n; j++)
                if (f[i][j] == g[m]) ok[i][j][m] = 1;
        for (int k = m - 1; k >= 1; k--)
            for (int i = 1; i <= 2; i++)
                for (int j = 1; j <= n; j++)
                {
                    if (f[i][j] != g[k]) continue;
                    ok[i][j][k] += ok[i - 1][j][k + 1];
                    ok[i][j][k] += ok[i + 1][j][k + 1];
                    ok[i][j][k] += ok[i][j - 1][k + 1];
                    ok[i][j][k] += ok[i][j + 1][k + 1];
                    ok[i][j][k] %= 1007;
                }
        int ans = 0;
        for (int i = 1; i <= 2; i++)
            for (int j = 1; j <= n; j++)
                ans += ok[i][j][1];
        cout << ans % 1007 << endl;
        return 0;
    }
    

    信息

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