经典指数          
原因
2263
浏览数
0
收藏数
 

对于两个字符串A和B,我们需要进行插入、删除和修改操作将A串变为B串,定义c0,c1,c2分别为三种操作的代价,请设计一个高效算法,求出将A串变为B串所需要的最少代价。 给定两个字符串A和B,及它们的长度和三种操作代价,请返回将A串变为B串所需要的最小代价。保证两串长度均小于等于300,且三种代价值均小于等于100。 测试样例: "abc",3,"adc",3,5,3,100 返回:8

     举报   纠错  
 
切换
1 个答案
int dp[505][505]; class MinCost { public: int findMinCost(string A, int n, string B, int m, int c0, int c1, int c2) { // write code here memset(dp, 0x3f, sizeof(dp)); dp[0][0] = 0; c2 = min(c2, c0+c1); //修改 = 先删除后插入 for(int i=0; i<=n; i++) for(int j=0; j<=m; j++){ int edit = A[i-1]!=B[j-1]? c2: 0; if(j) dp[i][j] = min(dp[i][j], dp[i][j-1] + c0); if(i) dp[i][j] = min(dp[i][j], dp[i-1][j] + c1); if(i&&j)dp[i][j] = min(dp[i][j], dp[i-1][j-1] + edit); } return dp[n][m]; } };
 
切换
撰写答案
扫描后移动端查看本题