// Source: https://usaco.guide/general/io
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define FORD(i,a,b) for(int i=(b);i>=(a);--i)
const int N=302;
int dp[N+2][N+2];
int n,m;
string s1,s2;
int32_t main(){
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	cin>>n>>m;
	cin>>s1>>s2; s1='#'+s1,s2='#'+s2;
	memset(dp,0x3f,sizeof dp);
	FOR(i,1,n) if (s1[i]==s2[1]) dp[1][i]=0;
	int INF=dp[0][0];
	FOR(i,2,m){
		FOR(j1,1,n){
			if (s1[j1]==s2[i]) dp[i][j1]=min(dp[i-1][j1-1]+1,dp[i][j1]);
			if (s1[j1]==s2[i]) dp[i][j1]=min(dp[i-1][j1+1]+1,dp[i][j1]);
		}
		FOR(j1,1,n) FOR(j2,1,n){
			if (s1[j1]==s1[j2]) dp[i][j2]=min(dp[i][j2],dp[i][j1]+abs(j1-j2));
		}
	}
	int ans=INF;
	FOR(i,1,n) ans=min(ans,dp[m][i]);
	cout<<(ans==INF?-1:ans);
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |