- 앞에서 진행했었던 가방문제와 동일하다고 생각할 수 있으나, 한 유형당 문제 한 개만 풀 수 있다는 점이 다르다. 가방문제에서는 보석 각 타입을 무한정으로 이용할 수 있었다
- 상황을 이해하기 위해 우선 2차원 배열로 이해해보자
- 문제를 중복해서 풀지않기 위해서 2차원 배열로 풀어냈는데, 이는 1차원 배열로도 설명이 가능하다
위의 1차원 배열 코드 구현은 공간복잡도 시간복잡도 모두 고려했기 때문에 아주 최적이다
1
2
3
4
5
6
7
8
9
10
11
12
13
|
if __name__=='__main__':
n, m = map(int, input().split())
dyn = [0]*(m+1)
for i in range(1, n+1):
scr, min = map(int, input().split())
for j in range(m, min-1, -1):
dyn[j] = max(dyn[j], dyn[j-min]+scr)
print(dyn[m])
|
cs |
728x90
'Data Structures & Algorithms' 카테고리의 다른 글
[프로그래머스] 윤년 요일 찾기 (0) | 2022.11.03 |
---|---|
[Algorithms] 동적 계획법(Dynamic Programming)-위상정렬(그래프 정렬) (0) | 2022.06.09 |
[Algorithms] 동적 계획법(Dynamic Programming)-동전 교환(냅색 알고리즘) (0) | 2022.06.08 |
[Algorithms] 동적 계획법(Dynamic Programming)-가방문제(냅색 알고리즘) (0) | 2022.06.08 |
[Algorithms] 동적 계획법(Dynamic Programming)-알리바바와 40인의 도둑(Bottom-Up & Top-Down) (0) | 2022.06.07 |