dag动态规划 硬币问题
时间: 2023-12-13 16:34:30 浏览: 148
动态规划是解决硬币问题的一种常用方法,也称为背包问题。下面是使用动态规划解决硬币问题的步骤:
1.定义状态:设dp[i]表示凑出面值为i所需的最少硬币数。
2.状态转移方程:对于每个硬币面值v,dp[i] = min(dp[i], dp[i-v]+1)。
3.初始化:dp = 0,其余dp[i] = float('inf')。
4.遍历:从dp到dp[S]遍历,最终dp[S]即为凑出面值为S所需的最少硬币数。
5.输出最小值和最大值:最小值为dp[S],最大值为S除以硬币面值的最小整数商加1。
下面是Python代码实现:
```python
def coinChange(coins, amount):
dp = [float('inf')] * (amount + 1)
dp[0] = 0
for i in range(1, amount + 1):
for coin in coins:
if i >= coin:
dp[i] = min(dp[i], dp[i - coin] + 1)
if dp[amount] == float('inf'):
return -1
else:
return dp[amount], amount // min(coins) + 1
coins = [1, 2, 5]
amount = 11
min_coins, max_coins = coinChange(coins, amount)
print("最少硬币数为:", min_coins)
print("最多硬币数为:", max_coins)
```
阅读全文
相关推荐















