https://www.acmicpc.net/problem/11053
11053번: 가장 긴 증가하는 부분 수열
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이
www.acmicpc.net
동적계획법의 정석 문제
DP 풀이는 3가지 요소 dp식 정의, 초기값, 점화식 으로 구성된다.
처음부터 잘 할 수는 없고 꾸준히 dp문제를 풀면 감이 늘 것이다.
1) dp식 정의
dp[i] : i번째 원소까지 확인했을 때의 LIS 길이의 최댓값
2) 초기값
모든 LIS는 시작 원소를 반드시 포함하므로, 모든 원소는 최소 길이 1의 LIS에 포함된다고 할 수 있다.
따라서 dp[i] (1 <= i <= n)는 모두 1
3) 점화식
i > j인 i와 j에 대해, i번째 원소가 j번째 원소보다 클 경우 i는 j까지의 LIS의 맨 끝에 추가된다.
따라서 dp식 정의에 의해 dp[i]는 dp[j] + 1이다. 반복문을 통해 1 <= j < i인 j 중 dp[j]가 가장 큰 j를 찾으면 된다.
'백준' 카테고리의 다른 글
백준 10211 - Maximum Subarray (1) | 2023.08.09 |
---|---|
백준 9252 - LCS 2 (0) | 2023.08.09 |
백준 1497 - 기타콘서트 (0) | 2023.08.06 |
백준 27499 - 레이저 쏘기 (0) | 2023.08.05 |
백준 16563 - 어려운 소인수분해 (0) | 2023.08.05 |