문제 설명
- 알려진 코인 시스템 하에서 변경에 필요한 코인의 수가 가장 적습니다.
문제 해결 아이디어
- 문제의 최적해에는 작은 문제의 최적해가 포함되어 있으며, 이는 동적 프로그래밍 전략을 사용하여 최적화 문제를 해결하는 데 필요한 조건입니다.
- 이 문제를 해결하기 위해서는 액면가가 작은 코인의 개수를 순차적으로 알아낸 후, 이를 토대로 최적화하는 것입니다.
암호
def dpMakeChange(coinValuelist, change, minCoins):
"""
:coinValuelist: 硬币体系
:change: 找零数
:minCoins: 动态规划初始化列表
"""
for cents in range(1, change+1):
coinCount = cents
for j in [c for c in coinValuelist if c<= cents]:
if minCoins[cents - j] + 1 < coinCount:
coinCount = minCoins[cents - j] + 1
minCoins[cents] = coinCount
return minCoins[change]
print(dpMakeChange([1,5,10,21,25], 63, [0]*64))