# 동전을 최소로 사용해서 m원을 만드는게 아님
# m원을 만들 수 있는 가짓수를 구하는 것.
# dp[i] = i원을 만들 수 있는 가짓수
t = int(input())
for _ in range(t):
n = int(input())
coins = list(map(int, input().split()))
m = int(input())
dp = [0] * (m + 1)
dp[0] = 1
for coin in coins:
for i in range(coin, m + 1):
dp[i] += dp[i - coin]
print(dp[m])
문제의 목표
m원을 만드는데 필요한 동전의 가짓수의 최솟값이 아님에 유의하자.
현재 가지고 있는 동전들 중에서 하나를 선택하고, 선택한 동전의 가치에서 m원까지 만들어본다. 이를 모든 동전에 대해서 반복한다.
점화식은 아래와 같다.
dp[i] = i원을 만들 수 있는 가짓수
e.g. 5원 짜리 동전, m = 12
e.g. 7원 짜리 동전, m = 12