문제
https://www.acmicpc.net/problem/11052
11052번: 카드 구매하기
첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000)
www.acmicpc.net
코드
n=int(input())
array=[0]+list(map(int, input().split()))
dp=[0]*(n+1)
for i in range(len(array)):
for j in range(i+1):
dp[i]=max(dp[i],array[j]+dp[i-j])
print(dp[n])
생각 정리
dp[n]은 n개의 최댓값을 저장하는 배열이다.
dp[1] = array[1]
dp[2] = array[2]+dp[0] or array[1]+dp[1]
dp[3] = array[3]+dp[0] or array[2]+dp[1] or array[1] + dp[2]
이런 식으로 작은 문제부터 점차 해결해갔다.
'문제풀이 > DP' 카테고리의 다른 글
[파이썬] [DP] 백준 15988 1, 2, 3 더하기 3 (0) | 2023.04.07 |
---|---|
[파이썬] [DP] 백준 1446 지름길 (0) | 2023.02.28 |
[파이썬] [DP] 백준 15989 1, 2, 3 더하기 4 (0) | 2023.02.27 |
[파이썬] [DP] 백준 23083 꿀벌 승연이 (0) | 2023.02.06 |
[파이썬] [DP] 백준 27210 신을 모시는 사당 (0) | 2023.01.14 |