#include <bits/stdc++.h>
using namespace std;
#define ll long long
int N, M;
string A, B;
int dp[305][305];
int main() {
ios_base::sync_with_stdio(0), cin.tie(0);
cin >> N >> M;
cin >> A >> B;
for (int i = 0; i < 305; i++) for (int j = 0; j < 305; j++) dp[i][j] = 1e9;
for (int i = 0; i < N; i++) {
if (A[i] == B[0]) {
dp[0][i] = 0;
if (M == 1) {
cout << 0;
return 0;
}
}
}
int ans = 1e9;
for (int k = 1; k < M; k++) {
int mn = 1e9;
for (int i = 0; i < N; i++) {
if (A[i] != B[k]) continue;
if (i >= 1) {
if (A[i - 1] == B[k - 1]) {
dp[k][i] = min(dp[k][i], dp[k - 1][i - 1] + 1);
}
}
if (i + 1 < N) {
if (A[i + 1] == B[k - 1]) {
dp[k][i] = min(dp[k][i], dp[k - 1][i + 1] + 1);
}
}
}
for (int i = 0; i < N; i++) {
if (A[i] != B[k]) continue;
for (int j = 0; j < N; j++) {
//if (i == j || B[k - 1] != A[j]) continue;
dp[k][i] = min(dp[k][i], dp[k][j] + abs(i - j));
}
}
if (k == M - 1) {
for (int i = 0; i < N; i++) ans = min(ans, dp[k][i]);
}
}
/*for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
cout << dp[i][j] << " ";
} cout << endl;
}*/
cout << (ans == 1e9 ? -1 : ans);
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |