https://www.acmicpc.net/problem/2624
동전의 갯수가 정해져있기 때문에 이전행에 동전의 갯수(cnt) * 금액(val) 만큼 dp를 더해주면된다
점화식은 dp[i][j] = dp[i][j] + dp[i-1][j-v*val] ( 1 <= v <= cnt)
T = int(input())
k = int(input())
coin = [[0, 0]]
dp = [[0 for _ in range(T+1)] for _ in range(k+1)]
for _ in range(k):
x, y = map(int, input().split())
coin.append([x, y])
dp[0][0] = 1
for i in range(1, k+1):
val, cnt = coin[i]
for j in range(T+1):
dp[i][j] = dp[i-1][j]
for v in range(1, cnt+1):
if j-v*val >= 0:
dp[i][j] += dp[i-1][j-v*val]
else:
break
print(dp[k][T])
'알고리즘 > BOJ' 카테고리의 다른 글
[Python] 백준 2666번: 벽장문의 이동 (0) | 2021.10.15 |
---|---|
[Python] 백준 1351번: 무한 수열 (0) | 2021.10.15 |
[Python] 백준 2602번: 돌다리 건너기 (0) | 2021.10.14 |
[Python] 백준 11058번: 크리보드 (0) | 2021.10.14 |
[Python] 백준 2616번: 소형기관차 (0) | 2021.10.14 |
댓글