실버2 : 동적계획법 문제이다.

풀이

그냥 합을 구하는 문제이다.

Code

# dp[n] = n까지의 원소를 포함했을 때, 가장 긴 증가하는 부분 수열의 길이
# dp[n] = dp[1~n-1] + 1 (만약 가능할 경우)
 
import sys
 
input = sys.stdin.readline
 
n = int(input())
a = [0] + list(map(int, input().split()))
dp = [[1, a[i]] for i in range(n + 1)]
max_length = 0
for i in range(2, n + 1):
    for j in range(1, i):
        if a[i] > a[j]:
            if dp[i][0] < dp[j][0] + 1:
                dp[i][0] = dp[j][0] + 1
                dp[i][1] = max(dp[i][1], dp[j][1] + a[i])
            # dp[i][0] = max(dp[i], dp[j] + 1)
 
ans, index = 0, 0
 
for i in range(1, len(dp)):
    if ans < dp[i][1]:
        ans = dp[i][1]
print(ans)```
 
 
# Reference
* [백준(11055번) - 가장 긴 증가하는 부분 수열](https://www.acmicpc.net/problem/11055)