Advertisement
Guest User

dichnumber2

a guest
Apr 23rd, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <vector>
  4. #include <utility>
  5. using namespace std;
  6.  
  7. void printLCS(vector<vector<char>>& path_, vector<int>& x_, int i, int j) {
  8.     if (i == 0 || j == 0)
  9.         return;
  10.     if (path_[i][j] == 's') {
  11.         printLCS(path_, x_, i-1, j-1);
  12.         cout << x_[i] << " ";
  13.     } else if (path_[i][j] == 'u') {
  14.         printLCS(path_, x_, i-1, j);
  15.     } else {
  16.         printLCS(path_, x_, i, j-1);
  17.     }
  18.     return;
  19. }
  20.  
  21. int main() {
  22.     int xlength, ylength;
  23.     cin >> xlength;
  24.     vector<int> x(xlength + 1);
  25.     for (int i = 1; i <= xlength; ++i)
  26.         cin >> x[i];
  27.     cin >> ylength;
  28.     vector<int> y(ylength + 1);
  29.     for (int i = 1; i <= ylength; ++i)
  30.         cin >> y[i];
  31.     vector<vector<int>> lcs(xlength + 1, vector<int>(ylength + 1, 0));
  32.     vector<vector<char>> path_(xlength + 1, vector<char>(ylength));
  33.     for (int i = 1; i <= xlength; ++i) {
  34.         for (int j = 1; j <= ylength; ++j) {
  35.             if (x[i] == y[j]) {
  36.                 lcs[i][j] = lcs[i-1][j-1] + 1;
  37.                 path_[i][j] = 's';
  38.             } else if (lcs[i-1][j] >= lcs[i][j-1]) {
  39.                 lcs[i][j] = lcs[i-1][j];
  40.                 path_[i][j] = 'u';
  41.             } else {
  42.                 lcs[i][j] = lcs[i][j-1];
  43.                 path_[i][j] = 'l';
  44.             }
  45.         }
  46.     }
  47.     printLCS(path_, x, xlength, ylength);
  48.     return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement