**實現:對於不同的要求,主要是找到求dp[i][j]的規律。
#include #include #include #include #include #include #include using namespace std;
#define max_length 50 //字串的最大長度
/* 求出dp[i][j] 代表從str1[0..i],變為str2[0..j]的最小代價
為了方便計算。str1和str2字串前都加上乙個空格
*/int mincost(const char* str1, const char* str2,const int ic, const int dc, const int rc)
int rows = strlen(str1) + 1;
int cols = strlen(str2) + 1;
int dp[max_length][max_length] = ;
int i = 0, j = 0;
/* 求出dp第一列 */
for(i = 1; i < rows; i++)
/* 求出第一行 */
for(j = 1; j < cols; j++)
/* 求出餘下的dp數值 */
for(i = 1; i < rows; i++)
else
dp[i][j] = min(dp[i][j], dp[i][j-1] + ic); //插入
dp[i][j] = min(dp[i][j], dp[i-1][j] + dc); //刪除}}
return dp[rows-1][cols-1];
}int main()
最小編輯代價(動態規劃)
在nowcoder上的題目,原題如下 對於兩個字串a和b,我們需要進行插入 刪除和修改操作將a串變為b串,定義c0,c1,c2分別為三種操作的代價,請設計乙個高效演算法,求出將a串變為b串所需要的最少代價。給定兩個字串a和b,及它們的長度和三種操作代價,請返回將a串變為b串所需要的最小代價。保證兩串...
最小編輯代價 動態規劃
對於兩個字串a和b,我們需要進行插入 刪除和修改操作將a串變為b串,定義c0,c1,c2分別為三種操作的代價 給定三種操作代價,字串a和b,求出將a串變為b串所需要的最少代價。保證兩串長度均小於等於300,且三種代價值均小於等於100。測試樣例 5 3 100 abc adc 返回 8 public...
最小編輯代價 動態規劃
題目描述 給定兩個字串str1和str2,再給定三個整數ic,dc和rc,分別代表插入 刪除和替換乙個字元的代價,請輸出將str1編輯成str2的最小代價。示例1輸入 abc adc 5,3,2 返回值 2 示例2輸入 abc adc 5,3,100 返回值 8 備註 1 str1 str2 500...