题目链接:货币系统
题目描述:
给定 V种货币(单位:元),每种货币使用的次数不限。
不同种类的货币,面值可能是相同的。
现在,要你用这 V 种货币凑出 N 元钱,请问共有多少种不同的凑法。
输入格式
第一行包含两个整数 V 和 N。
接下来的若干行,将一共输入 V个整数,每个整数表示一种货币的面值。
输出格式
输出一个整数,表示所求总方案数。
解释:
f[0] f[1] … f[n],是 n元钱的数量组合,
对于加入的价值为x的硬币,f[0]…f[x-1] 都不会变化.
但是f[x] 增加一种变化,即x自身就是一种情况.
对于f[x+1]可以看成 增加了 x 和 1的情况 1的组成情况为f[1],即f[x+1] = f[x+1]+f[1]
一般的,f[x+i] 看成 x 和 i 的组合情况,i的组成为f[i],即 f[x+i] = f [x+i] +f[i]
所以增加一种值的硬币,f[x] - f[n] 都要变化,变化情况为f[i]=f[i]+f[i-x]
v,n=map(int, input().split()) # v 种货币,凑出n元
dp=[0]*(n+1)
arr=[]
while len(arr) < v:
arr += [int(x) for x in input().split()]
dp[0]=1
for i in range(v):
x=arr[i]
for j in range(x,n+1):
dp[j]=dp[j]+dp[j-x]
print(dp[n])
标签:arr,背包,python,题解,凑出,整数,int,货币,dp
From: https://blog.csdn.net/2201_75325396/article/details/137459973