应用题-动态规划-零钱兑换( 完全背包 )
```python
class Solution:
# 一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。
# 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。
def coinChange(self, coins: List[int], amount: int) -> int:
# 指导思想: 完全背包
# 解题过程: 明确定义dp数组的含义
# dp[ i ] 表示装满容量为i的背包所需的最小金币数
MAX_ = float( 'inf' )
dp = [ MAX_ for _ in range( amount + 1 ) ]
dp[ 0 ] = 0
for v in coins:
for i in range( v, amount + 1 ):
dp[ i ] = min( dp[ i ], dp[ i - v ] + 1 )
return -1 if dp[ amount ] == MAX_ else dp[ amount ]
```