알고리즘 문제 2019. 11. 16. 18:05

longest increasing subsequence 최장 증가 수열 c++ vector

 

예시입력 57asdf123
예시출력 57adf

 

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;


int longest_increasing_subsequence(vector<char> vec) { 

    int n = vec.size();

    vector<vector<char> > subsequence(n); 

    subsequence[0].push_back(vec[0]); 

    for (int i = 1; i < n; i++){ 

        for (int j = 0; j < i; j++){ 

            if ((vec[i] > vec[j]) && 

                    (subsequence[i].size() < subsequence[j].size() + 1)) 

                subsequence[i] = subsequence[j]; 

        } 

        subsequence[i].push_back(vec[i]); 

    } 

  

    vector<char> max = subsequence[0]; 

    for (vector<char> x : subsequence) 

        if (x.size() > max.size()) 

            max = x; 



    for (char character : max) cout << character; 

    cout << endl; 

    return 0;
} 

int main() {

    while (true) {

        string input;

        string line;

        getline(cin,line);

        if (line.empty()) return 0;

        else {

            istringstream is = istringstream(line);

            is>>input;

            vector<char> vec(input.begin(),input.end());

            longest_increasing_subsequence(vec);

        }
    }
    return 0;

}