Advertisement
Josif_tepe

Untitled

Nov 6th, 2022
670
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.61 KB | None | 0 0
  1. #include <iostream>
  2. #include<string>
  3.  
  4. //#include <bits/stdc++.h>
  5. using namespace std;
  6. typedef long long ll;
  7. const int maxn = 1e5 + 10;
  8. const int MOD =  750083;
  9. string a, b;
  10. int dp[1111][1111];
  11. int rec(int i, int j) {
  12.     if(i == -1 and j == -1) {
  13.         return 0;
  14.     }
  15.     if(i == -1) {
  16.         return j + 1;
  17.     }
  18.     if(j == -1) {
  19.         return i + 1;
  20.     }
  21.     if(dp[i][j] != -1) {
  22.         return dp[i][j];
  23.     }
  24.     int result = 2e9;
  25.     if(a[i] == b[j]) {
  26.         result = min(result, rec(i - 1, j - 1) + 1);
  27.     }
  28.     result = min(result, rec(i - 1, j) + 1);
  29.     result = min(result, rec(i, j - 1) + 1);
  30.     return dp[i][j] = result;
  31. }
  32. int comb_dp[1111][111];
  33. int comb_rec(int i, int j) {
  34.     if(i == -1 or j == -1) {
  35.         return 1;
  36.     }
  37.     if(comb_dp[i][j] != -1) {
  38.         return comb_dp[i][j];
  39.     }
  40.     int result = 0;
  41.    
  42.     if(a[i] == b[j]) {
  43.         result += comb_rec(i - 1, j - 1);
  44.         result %= MOD;
  45.     }
  46.     else {
  47.         if(rec(i - 1, j) == rec(i, j - 1)) {
  48.             result += comb_rec(i, j - 1) + comb_rec(i - 1, j);
  49.             result %= MOD;
  50.         }
  51.         else if(rec(i - 1, j) < rec(i, j - 1)) {
  52.             result += comb_rec(i - 1, j);
  53.             result %= MOD;
  54.         }
  55.         else {
  56.             result += comb_rec(i, j - 1);
  57.             result %= MOD;
  58.         }
  59.     }
  60.     return comb_dp[i][j] = result;
  61. }
  62. int main()
  63. {
  64.     cin >> a >> b;
  65.     memset(dp, -1, sizeof dp);
  66.     memset(comb_dp, -1, sizeof comb_dp);
  67.   rec(a.size() - 1, b.size() - 1);
  68.     cout << comb_rec(a.size() - 1, b.size() - 1) << endl;
  69.     return 0;
  70. }
  71. /*
  72.  
  73.  **/
  74.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement