给出k种不同面值的硬币,每种硬币数量无限,再给出一个n,表示需要找的金额,请问最少需要几枚硬币才能凑出这个金额?如果凑不出来,输出No Answer!。测试开头给出整数 t 表示测试样例数量。
Input:
4
3 11
1 2 5
3 10
1 5 7
3 10
9 3 11
2 10
1 11
Output:
3
2
No Answer!
10
例如:样例1中11由5+5+1拼凑是最小硬币数量的条件。
1.暴力 dp
ans =
for _ in range(int(input())):
k,n = map(int,input().split())
arr = list(map(int,input().split()))
def dp(n):
if n == 0:return 0
if n < 0:return -1
res = float('INF')
for i in arr:
sub = dp(n-i)
if sub == -1:continue
res = min(res,1+sub)
return res if res != float('INF') else -1
get = dp(n)
if get == -1:print('No Answer!')
else:print(get)