取1元、2元和5元纸币共10张,凑整18元,共有几种方法?(用n表示)
时间: 2024-02-13 18:02:35 浏览: 122
java 实现有数量不限的面值为100,50,20,10,5,1元的纸币,问要组成N(N<=10^6)共有多少种组合方式
5星 · 资源好评率100%
这是一个典型的硬币找零问题,可以使用动态规划解决。我们可以定义一个长度为 19 的一维数组 dp,其中 dp[i] 表示凑整 i 元钱的方法数。初始时,dp[0]=1(不选取任何纸币也是一种方法),然后遍历纸币的面额,对于每一种面额的纸币,我们更新数组 dp 中的每个大于等于该面额的元素的值。
根据这个思路,可以得到以下代码:
```python
dp = [0] * 19
dp[0] = 1
for coin in [1, 2, 5]:
for i in range(coin, 19):
dp[i] += dp[i - coin]
n = dp[18]
print(n)
```
因此,凑整18元的方法数为 85 种。
阅读全文