有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱(n<100000),有多少中组合可以组成n分钱
时间: 2024-03-12 19:49:35 浏览: 126
java 实现有数量不限的面值为100,50,20,10,5,1元的纸币,问要组成N(N<=10^6)共有多少种组合方式
5星 · 资源好评率100%
这是一道经典的动态规划问题,可以使用动态规划求解。
设 $dp[i]$ 表示组成 $i$ 分钱的方案数,则有:
$$
dp[i] = dp[i-1] + dp[i-2] + dp[i-5] + dp[i-10]
$$
其中,$dp[i-1]$ 表示在组成 $i$ 分钱的方案中包含了一枚 $1$ 分硬币,$dp[i-2]$ 表示在组成 $i$ 分钱的方案中包含了一枚 $2$ 分硬币,$dp[i-5]$ 表示在组成 $i$ 分钱的方案中包含了一枚 $5$ 分硬币,$dp[i-10]$ 表示在组成 $i$ 分钱的方案中包含了一枚 $10$ 分硬币。
边界条件为 $dp[0]=1$,即不选取任何硬币时,方案数为 $1$。
最终答案为 $dp[n]$。
下面是该问题的 Python 代码实现:
```python
def coin_combinations(n):
dp = [0] * (n + 1)
dp[0] = 1
for i in range(1, n + 1):
if i >= 1:
dp[i] += dp[i-1]
if i >= 2:
dp[i] += dp[i-2]
if i >= 5:
dp[i] += dp[i-5]
if i >= 10:
dp[i] += dp[i-10]
return dp[n]
```
例如,输入 $n=12$,则输出 $dp[12]=61$,表示有 $61$ 种不同的组合方式可以组成 $12$ 分钱。
阅读全文