死因:数组越界
by 喵仔牛奶 @ 2023-02-02 14:21:31
正确:
```cpp
#include <bits/stdc++.h>
using namespace std;
const int N = 1005, M = 205, mod = 1e9 + 7;
long long n, m, qwq, f[2][N][M], g[2][N][M];
char a[N], b[M];
int main() {
cin >> n >> m >> qwq >> (a + 1) >> (b + 1);
for (int i = 0; i <= n; i ++) f[0][i][0] = 1;
for (int i = 0; i <= n; i ++)
for (int j = 0; j <= m; j ++) {
g[0][i][j] = f[0][i][j];
if (i && j) g[0][i][j] += g[0][i - 1][j - 1];
}
for (int i = 1; i <= qwq; i ++) {
int now = i & 1, sta = now ^ 1;
memset(f[now], 0, sizeof f[now]);
memset(g[now], 0, sizeof g[now]);
for (int j = 1; j <= n; j ++)
for (int k = 1; k <= m; k ++) {
int l = 0;
while (a[j - l] == b[k - l] && l < j && l < k) l ++;
f[now][j][k] = (f[now][j - 1][k] + g[sta][j - 1][k - 1]) % mod;
if (j > l && k > l) f[now][j][k] = (f[now][j][k] - g[sta][j - l - 1][k - l - 1] + mod) % mod;
g[now][j][k] = (g[now][j - 1][k - 1] + f[now][j][k]) % mod;
}
}
cout << f[qwq & 1][n][m] << '\n';
return 0;
}
```
by 喵仔牛奶 @ 2023-02-02 14:21:53