본문 바로가기

코딩/Python

[Python] 백준 11055 가장 큰 증가 부분 수열

반응형

https://www.acmicpc.net/problem/11055

 

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

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

www.acmicpc.net

 

코드 작성

dp = [0] * 1001
n = int(input())
arr = list(map(int, input().split()))
dp[0] = arr[0]
for i in range(n):
    for j in range(i):
        if arr[i] > arr[j]:
            dp[i] = max(dp[i], dp[j] + arr[i])
        else:
            dp[i] = max(dp[i], arr[i])
print(max(dp))

코드  풀이

#1 문제이해

가장 큰/긴 증가하는 부분수열의 비슷한 형태이다.

점화식 dp[i] = max(dp[i], dp[j] + arr[i])를 기억.

 

풀고보면 쉬운문제인데 완전히 이해하기까지 왜 그리 시간이 걸리는지...

하나의 문제를 완전히 이해하는데 8일이란 시간이 걸리면 양호한 편인듯...

반응형

'코딩 > Python' 카테고리의 다른 글

[Python] 백준 2133 타일 채우기  (0) 2022.12.18
[Python] 백준 11057 오르막수  (0) 2022.12.17
[Python] 백준 2309 일곱 난쟁이  (0) 2022.12.17
[Python] 백준 2225 합분해  (0) 2022.12.17
[Python] 백준 1476 날짜 계산  (0) 2022.12.15