LCS2는 다음 포스트에 있는 내용과 같다.
#include <cstdio> #include <algorithm> #include <vector> #include <cstring> using namespace std; vector<char> output; int cache[1001][1001]; char input[1001],compare[1000]; int LCS(int m,int n){ memset(cache,0,sizeof(cache)); for(int i=1;i<=m;i++){ for(int j=1; j<=n;j++){ if(compare[i-1] == input[j-1]){ cache[i][j] = cache[i-1][j-1] +1; } else{ cache[i][j] = std::max(cache[i-1][j], cache[i][j-1]); } } } return cache[m][n]; } void backTracking(int m, int n){ if(m==0 || n ==0) return; if(cache[m][n] > cache[m-1][n-1] && cache[m][n] > cache[m][n-1] && cache[m][n] > cache[m-1][n]){ output.push_back(input[n-1]); backTracking(m-1, n-1); }else if(cache[m][n] > cache[m-1][n] && cache[m][n] == cache[m][n-1]){ backTracking(m, n-1); }else{ backTracking(m-1, n); } } int main(){ scanf("%s%s",input,compare); int m = strlen(compare), n = strlen(input); printf("%d\n",LCS(m,n)); backTracking(m,n); for(int i=output.size()-1;i>=0;i--) printf("%c",output[i]); }
'Algorithm > Problems' 카테고리의 다른 글
백준 - 1238 파티 (0) | 2016.04.22 |
---|---|
백준 - 1753 최단경로 (1) | 2016.04.22 |
백준 - 9251 LCS (0) | 2016.04.17 |
알고스팟 - KOOGLE (0) | 2016.04.14 |
백준 - 1725, 6549 히스토그램 / 알고스팟 - FENCE (0) | 2016.03.28 |