-
Longest Increasing Subsequences알고리즘/DynamicProgramming 2020. 1. 12. 15:20
가장 긴 증가하는 부분 수열
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
Memoization 할 Array D
D[n] 은 Arr[1] ~ Arr[n] 까지 있을 때, Arr[n]을 마지막으로 하는 LIS 의 길이
D[n] 에 A[n]은 항상 포함되어야 한다.
예제에서 6개의 숫자
10 20 10 30 20 50 의 가장 긴 부분수열의 길이는 4이다.
10 - 20 - 30 - 50
for (int i=0; i<n; i++) { d[i] = 1; for (int j=0; j<i; j++) { if (arr[j] < arr[i] && d[i] < d[j]+1) { d[i] = d[j]+1; } } }
'알고리즘 > DynamicProgramming' 카테고리의 다른 글
1로 만들기 (0) 2020.01.12 DP 란 (0) 2020.01.12