문제 분류 수업 진도 대회 채점현황 순위 질문게시판
게임
스도쿠 타이핑 리듬 타자게임 타이핑 테트리스 타이핑 인베이더 타이핑 지뢰찾기 8192 공룡게임 타이핑 플래피버드 랭킹
로그인

8035 : 쉬운 LIS

•시간제한: 2.000 S •메모리제한: 256 MB •제출: 0 •통과: 0 •만든사람: suakii

8035 : 쉬운 LIS

시간 2.000s · 메모리 256MB · 제출 0 · 정답 0

문제 설명

$N$개의 정수로 이루어진 수열 $A$가 주어집니다. 이 수열의 가장 긴 증가하는 부분 수열(Longest Increasing Subsequence, LIS)의 길이를 구하는 프로그램을 작성하시오.



[제약 조건]
• $1 \le N \le 20$
• $1 \le a_i \le 20$ (정수)

입력 설명

첫째 줄에 수열의 크기 $N$이 주어집니다. ($1 \le N \le 20$)
둘째 줄에 수열의 원소 $a_1, a_2, \ldots, a_N$이 공백으로 구분되어 주어집니다. 각 원소는 $1$ 이상 $20$ 이하의 정수입니다.

출력 설명

가장 긴 증가하는 부분 수열의 길이를 출력합니다.

입력 예시
COPY
복사되었습니다!

5
1 4 2 4 3

출력 예시
COPY
복사되었습니다!

3

도움

$dp[i]$를 $a_i$를 마지막 원소로 갖는 증가 부분 수열 중 최대 길이라고 합시다. 모든 $dp$ 값을 $1$로 초기화한 후, 각 $i$에 대해 $i$ 이전의 인덱스 $j$ ($j < i$)들을 탐색하며 $a[j] < a[i]$인 조건이 성립할 때 $dp[i] = \max(dp[i], dp[j] + 1)$로 값을 갱신합니다. 최종적으로 $dp$ 배열의 최대값이 답이 되며, 시간 복잡도는 $O(N^2)$ 입니다. ($N \le 20$이므로 매우 빠르게 동작합니다.)

출처/분류

NOTICE  —  BFStudy OJ 정보샘
애들아, 문제 많이 풀고 게임 잠깐 하는거지?
— 정보샘