https://vijos.org/p/1680
中文题意:
技巧:
动态规划,和lcs差不多。
dp[i][j] 表示a的i和b的j相互匹配的最大值。
#include <bits/stdc++.h>
using namespace std;
const int maxn=2005;
int dp[maxn][maxn];
char s1[maxn];
char s2[maxn];
int cas;
int main()
{ int m,n;
scanf("%s",s1+1);
scanf("%s",s2+1);
scanf("%d",&cas);
m=strlen(s1+1);
n=strlen(s2+1);
for(int i=1;i<=max(m,n);i++){
dp[i][0]=i*cas;
dp[0][i]=i*cas;
}
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++)
{ dp[i][j]=min(dp[i-1][j],dp[i][j-1])+cas;
dp[i][j]=min(dp[i-1][j-1]+abs(s1[i]-s2[j]),dp[i][j]);
}
}
printf("%d\n",dp[m][n]);
//cout<<dp[m][n]<<endl;
return 0;
}