링크 : https://www.acmicpc.net/problem/11052
11052번: 카드 구매하기
첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000)
www.acmicpc.net
- 문제
- 소요시간: 27분
- 설계하기(접근방법)
1. 입력받기
카드 팩 리스트를 입력받는다
2. 구현하기
이전에 풀었던 DP 문제와 유사하다
중복되는 조합이 있으면
가장 작은 케이스부터 dp를 처리하고
가장 큰 숫자를 마지막으로 dp를 처리하여
카드 수를 뽑을 때 최대값을 구한다
3. 출력하기
최대값을 출력한다
- 코드(출력)
n = int(input())
pack = list(map(int, input().split()))
dp = [0] * (n+1)
card = [0] *(n+1)
for i in range(n):
card[i + 1] = pack[i]
for i in range(1, n+1):
card_now = card[i]
for j in range(i, n + 1):
if dp[j] < dp[j - i] + card_now:
dp[j] = dp[j - i] + card_now
print(dp[n])
- 얻어갈 부분
1. 이전에 풀어봤던 문제와 유사했다
'알고리즘(백준) > 동적 계획법' 카테고리의 다른 글
[알고리즘/DP] 2225번 : 합분해 - python (0) | 2024.03.01 |
---|---|
[알고리즘/DP] 11054번 : 가장 긴 바이토닉 부분 수열 - python (1) | 2024.03.01 |
[알고리즘/DP] 12865번 : 평범한 배낭 - python (0) | 2024.02.16 |
[알고리즘/DP] 9251번 : LCS - python (0) | 2024.02.16 |
[알고리즘/DP] 2565번 : 전깃줄 - python (0) | 2024.02.16 |