제출 #1299152

#제출 시각아이디문제언어결과실행 시간메모리
1299152kantaponzBajka (COCI20_bajka)C++20
20 / 70
9 ms584 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; 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]); } } for (int i = 0; i < N; i++) ans = min(ans, dp[M - 1][i]); cout << (ans == 1e9 ? -1 : ans); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...