问题描述
- 在已知的硬币体系下,要求找零结果中,硬币的个数最小
解题思路
- 问题的最优解包含了更小问题的最优解,这是一个最优化问题能够使用动态规划策略解决的必要条件。
- 针对此问题,就是依次找出更小面值的零钱找零个数,在此基础上再进行优化。
代码实现
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))