문제 : https://www.acmicpc.net/problem/2293
2293번: 동전 1
첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다.
www.acmicpc.net
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 |