Advertisement
MAGCARI

Password

May 1st, 2023
5,058
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.94 KB | None | 0 0
  1. /*
  2.     Task        : _example
  3.     Author      : Phumipat C. [MAGCARI]
  4.     Language    : C++
  5. */
  6. #include<bits/stdc++.h>
  7. using namespace std;
  8. char a[110],b[110],c[110];
  9. int dp[110][110][110];
  10. int main(){
  11.     int q;
  12.     cin >> q;
  13.     while(q--){
  14.         cin >> a+1 >> b+1 >> c+1;
  15.         int la = strlen(a+1),lb = strlen(b+1),lc = strlen(c+1);
  16.         // base cases
  17.         for(int i=0;i<=la;i++)
  18.             for(int j=0;j<=lb;j++)
  19.                 dp[i][j][0] = i+j;
  20.         for(int k=0;k<=lc;k++)
  21.             dp[0][0][k] = k;
  22.         // process
  23.         for(int k=1;k<=lc;k++){
  24.             for(int i=0;i<=la;i++){
  25.                 for(int j=0;j<=lb;j++){
  26.                     if(i == 0 && j == 0)    continue;
  27.                     // Insert
  28.                     dp[i][j][k] = dp[i][j][k-1]+1;
  29.                     // Remove and Replace (string a)
  30.                     if(i-1 >= 0)
  31.                         dp[i][j][k] = min({dp[i][j][k],dp[i-1][j][k]+1,dp[i-1][j][k-1]+(a[i]!=c[k])});
  32.                     // Remove and Replace (string b)
  33.                     if(j-1 >= 0)
  34.                         dp[i][j][k] = min({dp[i][j][k],dp[i][j-1][k]+1,dp[i][j-1][k-1]+(b[j]!=c[k])});
  35.                 }
  36.             }
  37.         }
  38.         cout << dp[la][lb][lc] << '\n';
  39.     }
  40.     return 0;
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement