题解
2026-01-25 11:32:14
发布于:上海
2阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
const int N = 2e3+3;
int dp[N][N];//dp[i][j]表示a的前\个字符变成b的前个字符最少需要的操作次数
int a[N],b[N];
int main () {
int n,m;// 初始化
cin>>n>>m;
for (int i=1;i<=n;i++)cin>>a[i];
for (int i=1;i<=m;i++)cin>>b[i];
for (int i=0;i<=n;i++) {
for (int j=0;j<=m;j++) {
dp[i][j] = 1e9+5;
}
}
dp[0][0]=0;
for (int i=0;i<=n;i++)dp[i][0] = i;
for (int j=0;j<=m;j++)dp[0][j] = j;
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++) {
if (a[i]==b[j])dp[i][j]=dp[i-1][j-1];
else dp[i][j]=min({dp[i][j-1],dp[i-1][j],dp[i-1][j-1]})+1;
}
}
cout<<dp[n][m]<<endl;
return 0;
}
这里空空如也







有帮助,赞一个