Alex_tz307

Subsir Comun Maximal + Reconstructie

Sep 12th, 2020
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.96 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define NMax 256
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("codul.in");
  7. ofstream fout("codul.out");
  8.  
  9. int n, m, dp[NMax][NMax];
  10. char a[NMax], b[NMax];
  11.  
  12. void Search (int i1, int j1, int k) {
  13.     int p1 = 0, p2 = 0;
  14.     char mx = '0';
  15.     if(k > 0) {
  16.         for(int i = i1; i < n; ++i)
  17.             for(int j = j1; j < m; ++j)
  18.                 if(dp[i][j] == k && a[i] == b[j] && a[i] > mx) {
  19.                     mx = a[i];
  20.                     p1 = i;
  21.                     p2 = j;
  22.                 }
  23.         fout << mx;
  24.         Search(p1 + 1, p2 + 1, k - 1);
  25.     }
  26. }
  27.  
  28. int main() {
  29.     fin.getline(a, 256);
  30.     fin.getline(b, 256);
  31.     n = strlen(a), m = strlen(b);
  32.     for(int i = n - 1; i >= 0; i --)
  33.         for(int j = m - 1; j >= 0; j --)
  34.             if(a[i] == b[j])
  35.                 dp[i][j] = 1 + dp[i + 1][j + 1];
  36.             else
  37.                 dp[i][j] = max(dp[i][j + 1], dp[i + 1][j]);
  38.     Search(0, 0, dp[0][0]);
  39. }
  40.  
Advertisement
Add Comment
Please, Sign In to add comment