https://www.acmicpc.net/problem/1965
import sys
input = sys.stdin.readline
n = int(input())
box = list(map(int, input().split()))
dp = [1] * n
for i in range(n):
for j in range(i):
if box[j] < box[i]:
dp[i] = max(dp[i], dp[j]+1)
print(max(dp))
- 가장 긴 감소하는 부분 수열, 가장 큰 증가하는 부분 수열과 비슷한 계열이다.
- 처음 코드를 짰을 때, dp[i] = max(dp[i]+1, dp[j]) 로 적어 오답이었다.
- 현재 자기자신과 이전 값에 자기자신이 포함되는 +1 이 되는 값 중 더 큰 값을 초기화 시키며 가장 큰 값을 구하면 된다.
'Algorithm > Problems' 카테고리의 다른 글
99클럽 코테 스터디 32일차 TIL + DP (0) | 2024.11.29 |
---|---|
99클럽 코테 스터디 31일차 TIL + DP (0) | 2024.11.28 |
99클럽 코테 스터디 29일차 TIL + DP (0) | 2024.11.25 |
99클럽 코테 스터디 28일차 TIL + DP (0) | 2024.11.25 |
99클럽 코테 스터디 27일차 TIL + DP (0) | 2024.11.24 |