코딩테스트/BOJ

[백준][DP][LIS] 11055. 가장 큰 증가하는 부분 수열

박소민 2024. 3. 1. 10:07
LIS (Longest Increasing Subsequence): 가장 큰 증가하는 부분 수열

 

11055. 가장 큰 증가하는 부분 수열
 

11055번: 가장 큰 증가하는 부분 수열

수열 A가 주어졌을 때, 그 수열의 증가하는 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가하는

www.acmicpc.net

 

  • 풀이
    • 이 문제는 LIS 중 가장 합이 큰 값을 구하는 문제 
    • i 전까지만 돌면서 현재값이 클때만 이전값에 현재위치 값 더해줌
      • 0번째 값은 for문에서 처리 못해주니까 따로 더해주기
    • 값이 같거나 작을 경우: 앞서 구해진 값이랑 그 위치값에서 다시 시작하는것중에 큰 걸로 
n=int(input())
num=list(map(int,input().split()))
dp=[1 for _ in range(n)]
dp[0]=num[0]
for i in range(n):
    for j in range(i):
        if num[i]>num[j]:
            dp[i]=max(dp[i], dp[j]+num[i])
        else:
            dp[i]=max(dp[i],num[i])

print(max(dp))