给定面值分别为2,5,7的硬币,每种硬币有无限个,给定一个n,求组成n最少需要的硬币的数量,若无法组成则返回-1.
时间: 2023-04-23 10:05:24 浏览: 143
这道题目可以使用动态规划来解决。我们可以定义一个数组dp,其中dp[i]表示组成i最少需要的硬币数量。初始时,dp[0]=0,因为组成0不需要任何硬币。
接下来,我们考虑如何更新dp数组。对于每个i,我们可以枚举使用哪种硬币,然后更新dp[i]。具体地,我们可以枚举使用面值为2的硬币,此时需要的硬币数量为dp[i-2]+1;枚举使用面值为5的硬币,此时需要的硬币数量为dp[i-5]+1;枚举使用面值为7的硬币,此时需要的硬币数量为dp[i-7]+1。最终,dp[i]的值就是上述三种情况中的最小值。
最后,如果dp[n]的值为无穷大,则说明无法组成n,返回-1;否则,返回dp[n]的值即可。
下面是Python代码实现:
def coinChange(n: int) -> int:
dp = [float('inf')] * (n + 1)
dp[0] = 0
for i in range(1, n + 1):
if i >= 2:
dp[i] = min(dp[i], dp[i - 2] + 1)
if i >= 5:
dp[i] = min(dp[i], dp[i - 5] + 1)
if i >= 7:
dp[i] = min(dp[i], dp[i - 7] + 1)
return dp[n] if dp[n] != float('inf') else -1
相关问题
有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱(n<100000),有多少中组合可以组成n分钱?
这是一个比较经典的动态规划问题,可以使用动态规划算法来解决。
首先,我们定义一个一维数组 dp,其中 dp[i] 表示组成 i 分钱所需的硬币组合数。因为每种硬币数量无限,所以在计算 dp[i] 时,我们需要考虑使用当前硬币和不使用当前硬币两种情况。
对于第一种情况,即使用当前硬币,那么组成 i 分钱的组合数就等于组成 i-coin 分钱的组合数加上当前硬币的一种组合数,其中 coin 表示当前硬币的面值。
对于第二种情况,即不使用当前硬币,那么组成 i 分钱的组合数就等于组成 i 分钱的组合数。
因此,我们可以得到状态转移方程:
```
dp[i] = dp[i] + dp[i-coin]
```
其中,coin 可以取 1 分、2 分、5 分、10 分这四种硬币。
最终,dp[n] 就是组成 n 分钱的组合数。
以下是 Python 代码实现:
```python
def coinChange(n):
coins = [1, 2, 5, 10]
dp = [0] * (n+1)
dp[0] = 1
for coin in coins:
for i in range(coin, n+1):
dp[i] += dp[i-coin]
return dp[n]
```
这个算法的时间复杂度是 O(n),可以在较短的时间内得到结果。
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。(提示:你可以认为每种硬币的数量是无限
的)
题目翻译:给定不同面额的硬币和一个总金额,求最少需要多少个硬币才能凑成总金额。如果无法凑成,返回-1。假设每种硬币数量无限。
解题思路:动态规划。定义一个数组dp,其中dp[i]表示凑成金额i所需的最少硬币数。初始化dp[0]=0,其余为正无穷。对于每个金额i,遍历硬币面额coins[j],如果coins[j]<=i,则dp[i]=min(dp[i],dp[i-coins[j]]+1)。最终返回dp[amount]即可。
代码如下:
相关推荐
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)