https://www.acmicpc.net/problem/2293
recur(index,sum)
if index == n:
return count +1
if sum >k:
return count
i = 0
while True:
sum + coin[index]*i > k:
break
recur (index+1,sum+coin[index]*1)
print(recur(0,0))
n , k = map(int,input().split())
coins = []
for i in range(n):
coins.append(int(input()))
coins.sort(reverse=True)
test_ary = []
def dfs(index,sum,k):
if sum ==k:
test_ary.append(0)
return
if sum>k or index==n:
return
i = 0
while True:
temp = i*coins[index] + sum
if temp >k:
break
i +=1
dfs(index+1,temp,k)
dfs(0,0,k)
print(len(test_ary))
=> 시간 초과
possible = [0] *(k+1)
possible[0]=1
for coin in coins
for index in range(coin,k+1)
case = possible[index-coin]
possible[index] += case
print(possible[k])