습관처럼

백준 11053 - 가장 긴 증가하는 부분 수열 본문

Algorithms/BOJ

백준 11053 - 가장 긴 증가하는 부분 수열

dev.wookii 2020. 4. 8. 09:49

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

 

11053번: 가장 긴 증가하는 부분 수열

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.

www.acmicpc.net

문제 설명


수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.

예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.

 

 

접근 방법


이 문제 같은 경우는 현재의 자신 값을 과거의 값들을 돌아봐서 그 중 최대의 값으로 자신의 최대 길이를 정하는 문제이다. 따라서 각 부분마다 과거의 저장한 배열을 검색을 해야한다.

 

 

코드


#include <iostream>
#include <vector>
using namespace std;
int n,cnt;
int number[1001];
int dp[1001];
int maxi;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>number[i];
    for (int i = 1; i <= n; i++){
        int mini = 0;
        for (int j = 0; j < i; j++){
            if (number[i]>number[j]){
                if (mini < dp[j]) mini = dp[j];
            }
        }
        dp[i] = mini + 1;
        if (maxi < dp[i])
            maxi = dp[i];
    }
    cout<<maxi<<"\n";
}

funny algorithm^^~

'Algorithms > BOJ' 카테고리의 다른 글

백준 2163 - 초코릿 자르기  (0) 2020.04.10
백준 9461 - 파도반 수열  (0) 2020.04.10
백준 1912 - 연속합  (0) 2020.04.08
백준 1932 - 정수 삼각형  (0) 2020.04.08
백준 1157 - 단어 공부  (0) 2020.04.08