실버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)