某小红薯在小红书的活动中抽奖中了一定价值的薯券,这些薯券可以用来购买一批商品,求有多少种购买组合。其中一件商品可以买多件。
输 入:薯券金额、商品分别价格
输出 :组合数
输入薯券金额、商品分别价格例如:10 [2,3,5]10与[2,3,5]中间有空格
输出4,则结果集可以为:2,2,2,2,2;5,5;2,3,5;2,2,3,3共有4种组合
10 [2,3,5]
4
str1 = input() arr = str1.split() # 购物券的价格 money = int(arr[0]) # 获取商品的价格列表 price = [int(i) for i in arr[1] if i.isdigit()] # 商品列表长度 n = len(price) # 记录状态值 dp = [[0 for i in range(money+1)]for j in range(n+1)] for i in range(1,n+1): dp[i][0] = 1 # 给定初始值 for i in range(1,n+1): for j in range(1,money+1): dp[i][j] = dp[i-1][j] if j>=price[i-1]: dp[i][j]+=dp[i][j-price[i-1]] print(dp[-1][-1])但是只能通过90%的案例,最后一个结果案例的结果比较大,应该要对其取相应的余数,但是题目没有告诉。