class MinCost {
public:
int findMinCost(string A, int n, string B, int m, int c0, int c1, int c2) {
//原版的编辑代价的基础上每个操作加入的权重,修改一下状态转移方程即可
//注意边界条件也有所变化
//仍然使用一行数组和一个额外空间记录左上位置即可
vector<int>dp(m+1);
//初始化要注意
for(int i=0 ;i<=m; i++)
dp[i]=i*c0;//只能全部增加
//循环处理
for(int i=1; i<=n; i++)
{
int prev=dp[0];//记录左上位置
dp[0]=i*c1;//只能全部删除
for(int j=1; j<=m; j++)
{
int tmp=dp[j];
if(A[i-1]==B[j-1])
dp[j]=prev;
else
dp[j]=min(prev+c2,min(dp[j]+c1,dp[j-1]+c0));
prev=tmp;
}
}
return dp[m];
}
};

京公网安备 11010502036488号