[HackerRank] The Longest Common Subsequence
8272 단어 sequence
My accepted code is as follows.
1 #include <iostream>
2 #include <vector>
3 #include <algorithm>
4
5 using namespace std;
6
7 vector<int> lcs(vector<int>& a, vector<int>& b) {
8 int n = a.size(), m = b.size();
9 vector<vector<int> > dp(n + 1, vector<int> (m + 1, 0));
10 for (int i = 1 ;i <= n; i++) {
11 for (int j = 1; j <= m; j++) {
12 if (a[i - 1] == b[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;
13 else dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
14 }
15 }
16 vector<int> res;
17 for (int i = n, j = m; i >= 1 && j >= 1;) {
18 if (a[i - 1] == b[j - 1]) {
19 res.push_back(a[i - 1]);
20 i--;
21 j--;
22 }
23 else if (dp[i - 1][j] >= dp[i][j - 1]) i--;
24 else j--;
25 }
26 reverse(res.begin(), res.end());
27 return res;
28 }
29
30 int main() {
31 /* Enter your code here. Read input from STDIN. Print output to STDOUT */
32 int n, m;
33 while (scanf("%d %d", &n, &m) != EOF) {
34 vector<int> a(n);
35 vector<int> b(m);
36 for (int i = 0; i < n; i++)
37 scanf("%d", &a[i]);
38 for (int i = 0; i < m; i++)
39 scanf("%d", &b[i]);
40 vector<int> res = lcs(a, b);
41 for (int i = 0; i < (int)res.size(); i++)
42 printf("%d ", res[i]);
43 printf("
");
44 }
45 return 0;
46 }
Well, try this problem here and get Accepted :)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
POJ 2442 SequenceSequence Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 6120 Accepted: 1897 Description Given m sequences, e...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.