题目
面值1,2,5
兑换7元
最少用多少张纸币
代码
1.递归法求解
#1,2,5 兑换7元 用最少几个纸币
s=list(map(int,input().split(",")))
m=int(input())
n=len(s)
count=0
sum=0
jishu=[]
fafang=[]
def find(s,c):
global sum,count
if c==0:
jishu.append(count)
# print(fafang)
if c < 0:
return
if c>0:
for i in range(n):
sum=sum+s[i]
count=count+1
# fafang.append(s[i])
find(s,c-s[i])
sum=sum-s[i]
count=count-1
# fafang.remove(s[i])
find(s,m)
if len(jishu)==0:
print(-1)
else:
print(min(jishu))
2.动态规划方法(参考运筹学)
mount=7
dp=[mount+1]*(mount+1)
coins=[1,2,5]
dp[0]=0
for i in range(1,mount+1):
for coin in coins:
if i-coin>=0:
dp[i]=min(dp[i],1+dp[i-coin])
print(dp)