액면가가 제한된 동전(₩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