문제출처
https://www.acmicpc.net/submit/11055/47854662
문제를 스스로 해결하였는가? -> O
11053번(가장 긴 증가하는 부분 수열)문제와 거의 똑같다. 이 문제를 풀기 전에 11053번을 먼저 풀어서 쉽게 풀 수 있었다. 백준에 관련된 응용문제가 많은 것 같으니 다음에 참고할 수 있도록 정리해두자.
사용된 알고리즘
- dp
풀이 전략
11053번과 아이디어는 똑같다. 다만 초기 dp값 설정이 다르고, dp값 안에 수열의 길이가 들어가는게 아니라 수열의 합이 들어가게 된다. dp[i]는 0부터 i까지 수열에서 A[i]를 포함한 증가 부분 수열의 합 중 가장 큰 값이다.
전체코드
n = int(input())
A = list(map(int, input().split(' ')))
dp = A[:]
for i in range(n):
tmp = []
for j in range(i):
if A[j] < A[i]:
tmp.append(dp[j])
if len(tmp)!=0:
dp[i] = max(tmp) + A[i]
print(max(dp))
'알고리즘 (Python) > 백준' 카테고리의 다른 글
[백준 1107번][골드5] 리모컨 (파이썬) (0) | 2022.08.17 |
---|---|
[백준 11053번][실버2] 가장 긴 증가하는 부분 수열 (파이썬) (0) | 2022.08.17 |
[백준 14501번][실버3] 퇴사 (파이썬) (0) | 2022.08.16 |
[백준 1011번][골드5] Fly me to the Alpha Centauri (파이썬) (0) | 2022.08.15 |
[백준 12865번][골드5] 평범한 배낭 (파이썬) (0) | 2022.08.15 |
댓글