Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Task : Edit distance
- Author : Phumipat C. [MAGCARI]
- Language: C++
- Created : 08 January 2023 [08:57]
- */
- #include<bits/stdc++.h>
- using namespace std;
- char a[110],b[110];
- int dp[110][110];
- int main(){
- int c1,c2,c3; // c1 = insert, c2 = delete, c3 = replace
- scanf(" %s %s %d %d %d",a+1,b+1,&c1,&c2,&c3);
- int n = strlen(a+1),m = strlen(b+1);
- // base case
- for(int i=1;i<=n;i++) dp[i][0] = i;
- for(int i=1;i<=m;i++) dp[0][i] = i;
- // dp
- for(int i=1;i<=n;i++){
- for(int j=1;j<=m;j++){
- if(a[i] == b[j])
- dp[i][j] = dp[i-1][j-1];
- else
- dp[i][j] = min({dp[i-1][j]+c2,dp[i][j-1]+c1,dp[i-1][j-1]+c3});
- }
- }
- printf("%d\n",dp[n][m]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment