[백준 파이썬] 17216 가장 큰 감소 부분 수열

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

 

17216번: 가장 큰 감소 부분 수열

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

www.acmicpc.net

문제


 

아이디어

모든 경우를 계산하며, dp값으로 누적하면 되겠다고 생각했다.

 


풀이

위의 dp값중 가장 큰 값을 출력하면 정답이 된다.


코드

import sys
input = sys.stdin.readline

N = int(input())
arr = list(map(int, input().split()))
dp = arr[:]

for i in range(N):
    for j in range(i):
        if arr[j] > arr[i]:
            dp[i] = max(dp[i], dp[j] + arr[i])
print(max(dp))