试题 历届真题 最优包含【第十届】【决赛】【B组】
资源限制
时间限制:1.0s 内存限制:256.0MB
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
char a[N],b[N];
int f[N][N];
int main()
{
cin>>a+1;
cin>>b+1;
int n=strlen(a+1);
int m=strlen(b+1);
//初始化
memset(f,0x3f,sizeof(f));
f[0][0]=0;//a的前0个字母和b的前0个字母的最少修改次数为0
for(int i=1;i<=n;i++)
{
f[i][0]=0;
for(int j=1;j<=m;j++)
{
f[i][j] = f[i - 1][j];//前i个字符包含子串j的转移:前i-1个字符串包含子串j
if(a[i] == b[j]) f[i][j] = min(f[i][j], f[i - 1][j - 1]);
else f[i][j] = min(f[i][j], f[i - 1][j - 1] + 1);//修改
}
}
cout<<f[n][m]<<endl;
return 0;
}