문제 주소: https://www.acmicpc.net/problem/11055
난이도: silver 2
#DP테이블 선언
dp = [0] * N
dp[0] = nums[0]
#핵심부분
for i in range(1,N): #피벗을 정해놓음 1번부터(0번은 테이블 생성할때 업데이트해줌)
for j in range(i): #피벗 이전의 원소들을 순회하면서
if nums[j] < nums[i]: #피벗 이전의 원소보다 피벗의 원소가 더 크면(증가 부분수열이 계속 성립하면)
dp[i] = max(dp[i], dp[j]+nums[i]) #max(현재값 or j번째 원소까지 증가 부분순열의 합 + i번째 원소의 값)
else: #증가 부분수열이 끊기면
dp[i] = max(dp[i], nums[i]) #그냥 쓸지, 아니면 새롭게 시작할지 정함
N = int(input())
nums = list(map(int, input().split()))
dp = [0] * N
dp[0] = nums[0]
for i in range(1,N):
for j in range(i):
if nums[j] < nums[i]:
dp[i] = max(dp[i], dp[j]+nums[i])
else:
dp[i] = max(dp[i], nums[i])
print(max(dp))