[BOJ] 2293
others
- 전체를 부분 문제로 잘 나누었는가 (부분문제의 점화식)
- 부분 문제를 잘 풀면서 메모이제이션을 잘 하였는가
- 해당 점화식은 부분 문제 사이의 관계를 잘 표현했는가
해당 문제는 가치의 합이 k가 되는 조합
즉, 부분 문제는 가치의 합이 i가 되는 조합(1=<i<=k)
찾기 > 특정 동전을 썼을 때 가치의 합이 i가 되는 것 찾기
메모리는 4mb밖에 안되므로 배열 하나로 해야 한다.
출처
n, k = map(int, input().split())
c = []
dp = [0 for i in range(k + 1)]
dp[0] = 1
for i in range(n):
c.append(int(input()))
for i in c:
for j in range(1, k + 1):
if j - i >= 0:
dp[j] += dp[j - i]
print(dp[k])
- 특정 가치에서 현재 동전을 빼도 0이상인가 (현재 동전으로 가치 합 찾을 수 있는지)
1-1. 가능하다면 이전 가치 경우의 수를 더해주기
if j-i>=0 : do[j]+=dp[j-i]
i가 j-i에서 0 이상이면 해당 가치는 j-i 가치의 경우의 수 + 현재까지의 j의 경우의 수이다.
i가 2이고 j가 7이면, 7일때 경우의 수에 5(7-2)일때 경우의 수를 더 해준 것이라는 것
7을 만들기 위해 2+5가 가능하니 5일때 경우의 수에 2가 더해지면 7이니 7을 만들 수 있는 경우의 수가 하나 늘어나는 것.
(맞나..?)
출처
🥺🥲😭
Author And Source
이 문제에 관하여([BOJ] 2293), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@kinnyeri/BOJ-2293
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Author And Source
이 문제에 관하여([BOJ] 2293), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kinnyeri/BOJ-2293저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)