https://blog.csdn.net/weixin_34146805/article/details/93714738
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
string a,b;
//最开始想的那个贪心啥的,根本不可行啊,dfs又太深了,那就dp吧
int dp[10001][10001];
int minn(int a,int b,int c)
{
return min(min(a,b),c);
}
void fun()
{
/// dp[i][j]:表示a[0]-a[i]分别和b[0]-b[j]对应时修改的个数
int lena=a.length();
int lenb=b.length();
dp[0][0]=0;
for(int i=0;i<lena;i++)
dp[i][0]=i;
for(int j=0;j<lenb;j++)
dp[0][j]=j;
for(int i=1;i<=lena;i++)
{
for(int j=1;j<=lenb;j++)
{
if(a[i-1]==b[j-1])
dp[i][j]=dp[i-1][j-1];
else
{ // 删除 修改 添加
dp[i][j]=minn(dp[i-1][j],dp[i-1][j-1],dp[i][j-1])+1;
}
}
}
cout<<dp[lena][lenb]<<endl;
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
cin>>a;
cin>>b;
fun();
}
return 0;
}