문제 : https://www.acmicpc.net/problem/2293
DP 문제다.
어떠한 동전 c 를 이용해서 1-x를 만드는 모든 방법을 value에 더하는 방식으로 구할 수 있다.
첫번째 동전까지 이용해서 x를 만드는 경우의 수 +
두번째 '' +
세번째 '' +
...
...
를 하면 모든 동전을 사용하여 x 를 만드는 모든 경우의 수를 구할 수 있다.
이때, 동전값을 c라 할 때, x-c >=0, 즉 목표값보다 동전값이 작을 때만 이전의 경우의 수 value[x-c]를 더할 수 있다.
import sys
n, k = [int(i) for i in sys.stdin.readline().split()]
coins = []
for _ in range(n):
coins.append(int(sys.stdin.readline()))
value = [0]*(k+1)
value[0] = 1
for c in coins:
for x in range(1, k+1):
if x-c >= 0:
value[x] += value[x-c]
print(value[-1])
'취준 > 백준' 카테고리의 다른 글
[백준][Python][2294][DP] 동전 2 (0) | 2020.02.29 |
---|---|
[백준][Python][11054][DP]가장 긴 바이토닉 부분 수열 (0) | 2020.02.28 |
[백준][Python][14891][시뮬레이션] 톱니바퀴 (0) | 2020.02.27 |
[백준][Python][14501][15486][DP]퇴사, 퇴사2 (0) | 2020.02.27 |
[백준][Python][11722][DP]가장 긴 감소하는 부분 수열 (0) | 2020.02.26 |