제출 #1299148

#제출 시각아이디문제언어결과실행 시간메모리
1299148kantaponzBajka (COCI20_bajka)C++20
0 / 70
7 ms572 KiB
#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;
    
    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;
            if (dp[k][i] != 1e9) continue;
            for (int j = 0; j < N; j++) {
                if (i == j) continue;
                dp[k][i] = min(dp[k][i], dp[k-1][j] + abs(i - j));
            }
        }
        if (k == M - 1) {
            for (int i = 0; i < N; i++) ans = min(ans, dp[k][i]);
        }
    }
    
    cout << (ans == 1e9 ? -1 : ans);


    

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...