1 条题解
-
0
设 为走了 步最终到达 的合法方案数,直接 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
- 上传者