输入包括两行,第一行两个整数n(0<=n<=1000)代表数组长度和aim(0<=aim<=5000),第二行n个不重复的正整数,代表arr。
输出一个整数,表示组成aim的最小货币数,无解时输出-1.
3 20 5 2 3
4
20=5*4
3 0 5 2 3
0
2 2 3 5
-1
时间复杂度,空间复杂度
。
n,m=input().split() l=list(map(int,input().split())) n=int(n) m=int(m) l.sort() def fun(n,m,l): if m==0: return 0 if m<l[0]: return -1 dp=[0 for i in range(m+1)] #dp[0]=0 for i in range(n): a=l[i] if a>m: break dp[a]=1 for j in range(a+1,m+1): if dp[j-a]>0: if dp[j]==0: dp[j]=dp[j-a]+1 else: dp[j]=min(dp[j],dp[j-a]+1) if dp[m]>0: return dp[m] else: return -1 print(fun(n, m, l))
N, K = list(map(int, input().split())) nums = list(map(int, input().split())) dp = [float('inf')]*(K+1) dp[0] = 0 for i in range(1, K+1): for j in range(N): if i < nums[j]: continue dp[i] = min(dp[i], dp[i-nums[j]]+1) if dp[K] == float('inf'): print(-1) else: print(dp[K])