# 정수 N, M을 입력 받기
n, m = map(int, input().split())
# N개의 화폐 단위 정보를 입력 받기
array = []
for i in range(n):
array.append(int(input()))
# 한 번 계산된 결과를 저장하기 위한 DP 테이블 초기화
d = [10001] * (m + 1)
# 다이나믹 프로그래밍(Dynamic Programming) 진행(보텀업)
d[0] = 0
for i in range(n):
for j in range(array[i], m + 1):
if d[j - array[i]] != 10001: # (i - k)원을 만드는 방법이 존재하는 경우
d[j] = min(d[j], d[j - array[i]] + 1)
# 계산된 결과 출력
if d[m] == 10001: # 최종적으로 M원을 만드는 방법이 없는 경우
print(-1)
else:
print(d[m])
[Python] 다이나믹 프로그래밍(12) - 병사 배치하기 (0) | 2022.06.26 |
---|---|
[Python] 다이나믹 프로그래밍(11) - 금광 (0) | 2022.06.26 |
[Python] 다이나믹 프로그래밍(8) - 개미전사 (0) | 2022.06.25 |
[Python] 다이나믹 프로그래밍(7) - 다이나믹 Vs 분할 정복 (0) | 2022.06.24 |
[Python] 다이나믹 프로그래밍(6) - 피보나치 수열(동작분석) (0) | 2022.06.24 |
댓글 영역