액면가가 제한된 동전(₩1, ₩2, ₩5 및 ₩10)이 있다고 가정합니다. 우리는 당신이 그것들을 총 ₩n으로 합할 수 있는 방법의 수를 찾아야만 합니다. 크기가 4인 배열 개수가 있으며 여기서 count[0]은 1루피의 코인을, count[1]은 2루피의 코인을 나타내는 식입니다.
따라서 입력이 n =25 count =[7,3,2,2]와 같으면 출력은 9가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 데놈 :=[1,2,5,10]
- A :=크기(n + 1)이고 0으로 채워지는 배열
- B :=A의 새 목록
- 0에서 (count[0] 및 n의 최소값) 범위에 있는 i에 대해
- A[i] :=1
- 1~3 범위의 i에 대해 다음을 수행합니다.
- 0 범위의 j가 [i]를 계산하려면 다음을 수행합니다.
- 0 ~ n + 1 - j *denom[i] 범위의 k에 대해, do
- B[k + j * denom[i]] :=B[k + j * denom[i]] + A[k]
- 0 ~ n + 1 - j *denom[i] 범위의 k에 대해, do
- 0에서 n 사이의 j에 대해 다음을 수행합니다.
- A[j] :=B[j]
- B[j] :=0
- 0 범위의 j가 [i]를 계산하려면 다음을 수행합니다.
- 반환 A[n]
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
denom = [1,2,5,10]
def solve(n, count):
A = [0] * (n + 1)
B = list(A)
for i in range(min(count[0], n) + 1):
A[i] = 1
for i in range(1, 4):
for j in range(0, count[i] + 1):
for k in range(n + 1 - j *denom[i]):
B[k + j * denom[i]] += A[k]
for j in range(0, n + 1):
A[j] = B[j]
B[j] = 0
return A[n]
n = 25
count = [7,3,2,2]
print(solve(n, count)) 입력
25, [7,3,2,2]
출력
9