최장 증가 수열(Long Increasing Subsequence)

백준 11568번: 민균이의 계략

cepiloth 2018. 7. 1. 19:43
반응형

https://www.acmicpc.net/problem/11568

 

LIS 문제

 

키워드 - DP, LIS

O(n^2)

 

Source

 

#include <iostream>
#include <sstream>
#include <string>
#include <algorithm>
#include <functional>
#include <vector>
#include <list>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <stack>

using namespace std;

#define MAX_SIZE 100
#define INF 0x7fffffff
#define CENDL "\n"
#define ll long long
/*
* @memory  - 2380 kb
* @time    - 56 ms
*/


int arr[1001];
int dp[1001];

int main() {

    cin.tie(0);
    std::ios::sync_with_stdio(false);

    int n; cin >> n;
    for(int i=1; i<=n; i++) {
        cin >> arr[i];
    }

    dp[1]=1;

    int sol = 1;
    for(int i=2; i<=n; i++){
        for(int j=i; j>=0; j--){
            if(arr[j] < arr[i]){
                dp[i] = max(dp[i],dp[j]+1);
            }
        }
        sol = max(sol, dp[i]);
    }

    cout << sol << CENDL;

    return 0;
}
 

 

반응형