Original title Address
LCD, Classic Motion, O (n^2) complexity
Because I want to output a subsequence, I'm going to verbose
1#include <cmath>2#include <cstdio>3#include <vector>4#include <iostream>5#include <algorithm>6#include <cstring>7 using namespacestd;8 9 #defineMax_len 128Ten One intN, M; A intA[max_len], B[max_len]; - intLcd[max_len][max_len]; - intStart_index_a[max_len][max_len]; the intStart_index_b[max_len][max_len]; - - intMain () { - /*Enter your code here. Read input from STDIN. Print output to STDOUT*/ +CIN >> N >>m; - for(inti =0; I < n; i++) +CIN >>A[i]; A for(inti =0; I < m; i++) atCIN >>B[i]; -memset (LCD,0,sizeof(LCD)); -memset (Start_index_a,0,sizeof(start_index_a)); - for(intj =0; J < M; J + +) -START_INDEX_A[N][J] = start_index_b[n][j] =-1; - for(inti =0; I < n; i++) inSTART_INDEX_A[I][M] = start_index_b[i][m] =-1; - for(inti = n-1; I >=0; i--) { to for(intj = m-1; J >=0; j--) { + if(A[i] = =B[j]) { -LCD[I][J] = lcd[i +1][j +1] +1; theSTART_INDEX_A[I][J] =i; *START_INDEX_B[I][J] =J; $}Else if(Lcd[i +1][J] > Lcd[i][j +1]) {Panax NotoginsengLCD[I][J] = lcd[i +1][j]; -START_INDEX_A[I][J] = start_index_a[i +1][j]; theSTART_INDEX_B[I][J] = start_index_b[i +1][j]; +}Else { ALCD[I][J] = lcd[i][j +1]; theSTART_INDEX_A[I][J] = start_index_a[i][j +1]; +START_INDEX_B[I][J] = start_index_b[i][j +1]; - } $ } $ } - - inti = start_index_a[0][0]; the intj = start_index_b[0][0]; - while(I >=0&& J >=0) {Wuyicout << A[i] <<" "; the intII = Start_index_a[i +1][j +1]; - intJJ = Start_index_b[i +1][j +1]; Wui =II; -j =JJ; About } $cout <<Endl; - return 0; -}
hackerrank# the longest Common subsequence