본문 바로가기
알고리즘 (Python)/백준

[백준 11055번][실버2] 가장 큰 증가 부분 수열 (파이썬)

by 근수짜세 2022. 8. 17.

문제출처

https://www.acmicpc.net/submit/11055/47854662

 

로그인

 

www.acmicpc.net


문제를 스스로 해결하였는가? -> O

 11053번(가장 긴 증가하는 부분 수열)문제와 거의 똑같다. 이 문제를 풀기 전에 11053번을 먼저 풀어서 쉽게 풀 수 있었다. 백준에 관련된 응용문제가 많은 것 같으니 다음에 참고할 수 있도록 정리해두자.


사용된 알고리즘

  • dp

풀이 전략

11053번과 아이디어는 똑같다. 다만 초기 dp값 설정이 다르고, dp값 안에 수열의 길이가 들어가는게 아니라 수열의 합이 들어가게 된다. dp[i]는 0부터 i까지 수열에서 A[i]를 포함한 증가 부분 수열의 합 중 가장 큰 값이다.


전체코드

n = int(input())
A = list(map(int, input().split(' ')))
dp = A[:]
for i in range(n):
    tmp = []
    for j in range(i):
        if A[j] < A[i]:
            tmp.append(dp[j])
    if len(tmp)!=0:
        dp[i] = max(tmp) + A[i]
print(max(dp))

댓글