321
社区成员




给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个aim,代表要找的钱数,求组成aim的最少货币数。 如果无解,请返回-1. 数据范围:数组大小满足 0 <= n <=10000 , 数组中每个数字都满足 0 < val <=10000,0 <= aim <=100000 要求:时间复杂度 O(n×aim) ,空间复杂度 O(aim)。
嗯,leetcode 322 题一模一样,可以自行到力扣查看相关题解。输入内容,用 py 处理还好,用c++就痛苦了。
arr,m = eval(input())
dp = [float('inf')] * (m + 1)
dp[0] = 0
for c in arr:
for p in range(c,m + 1):
dp[p] = min(dp[p],dp[p - c] + 1)
print(dp[-1] if dp[-1] != float('inf') else -1)