支付方法:取1元,2元和5元的纸币共十张,凑整18元,共有几种方法?(用n表示)
时间: 2024-02-18 11:59:18 浏览: 204
钱币组合方法数的问题
这是一道比较典型的硬币找零问题,可以使用动态规划的方法来求解。设 f[i][j] 表示前 i 种纸币,凑成 j 元的方案数,则有状态转移方程:
f[i][j] = f[i-1][j] + f[i][j-v[i]]
其中 v[i] 表示第 i 种纸币的面值。边界条件为 f[0][0]=1,即不使用任何纸币凑成 0 元的方案数为 1。
根据上述方程,可以使用二维数组进行动态规划求解,时间复杂度为 O(nm),其中 n 表示纸币种类数,m 表示需要凑出的金额数。对于本题来说,n=3,m=18,因此可以直接使用代码求解:
```python
n, m = 3, 18
v = [1, 2, 5]
f = [[0] * (m+1) for _ in range(n+1)]
f[0][0] = 1
for i in range(1, n+1):
for j in range(m+1):
f[i][j] = f[i-1][j]
if j >= v[i-1]:
f[i][j] += f[i][j-v[i-1]]
print(f[n][m])
```
经过计算,可以得到共有 31 种凑法。
阅读全文