꿈과 열정
백준 11052 파이썬 : 카드 구매하기 본문
반응형
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())
cards = list(map(int,input().split()))
# 최대 카드 값 배열 dp
dp = [0]*1001
for i in range(1,n+1):
for j in range(1,i+1): # j 개짜리 카드 값은 cards[j-1]
dp[i] = max(dp[i],dp[i-j]+cards[j-1])
print(dp[n])
< 설명 >
위 코드에서, i 개짜리 카드값 Pi 는 cards[i-1] 에 저장되어있고, dp 는 그냥 dp[i] 가 i 개 카드 구매 시 최대값이다.
dp[i] 는 dp[0] + cards[i-1] (Pi) 부터 dp[i-1] + cards[0] ( i-1 개 카드 최대값 + P1)까지의 값들 중 MAX 값이다.
예를 들어, 카드 4개를 구매한다고 했을 때...
P4 ( cards[3] )
1개 구매 시 최대 + P3 ( dp[1] + cards[2] )
2개 구매 시 최대 + P2 ( dp[2] + cards[1] )
3개 구매 시 최대 + P1( dp[3] + cards[0] )
를 비교한 최대값이 DP[4] 가 된다.
참고.
dp[0] = 0
dp[1] = cards[0]
dp[2] = max( dp[1] + cards[0], dp[0] + cards[1] )
dp[3] = max( dp[2] + cards[0], dp[1] + cards[1], dp[0] + cards[2] )
dp[4] = max( dp[3] + cards[0], dp[2] + cards[1], dp[1] + cards[2], dp[0] + cards[3] )
반응형
'알고리즘 문제풀이' 카테고리의 다른 글
백준 7576 파이썬 : 토마토 (0) | 2022.04.28 |
---|---|
백준 15662 파이썬 : 톱니바퀴(2) (0) | 2022.04.27 |
백준 6588 파이썬 : 골드바흐의 추측 (feat. 에라토스테네스의 체) (0) | 2022.04.23 |
백준 17299 파이썬 : 오등큰수 (0) | 2022.04.21 |
백준 1697 파이썬 : 숨바꼭질 (0) | 2022.04.20 |
Comments