다른 종류의 동전과 총 금액이 있다고 가정해 보겠습니다. 그 양을 구성하는 조합의 수를 계산하는 모듈을 작성해야 합니다. 우리는 각 종류의 동전이 무한히 있다고 가정할 수 있습니다. 따라서 금액이 5이고 동전이 [1, 2, 5]이면 4개의 조합이 있습니다. (1+1+1+1+1), (1+1+1+2), (1+2+2), (5)
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 크기 + 1의 배열 dp 하나 생성
- dp[0] :=1
- n :=동전 배열의 크기
- 0 ~ n – 1 범위의 i에 대해
- 범위 코인[i]의 j에 대해 금액
- dp[j] :=dp[j – 코인[i]]
- 범위 코인[i]의 j에 대해 금액
- 반환 dp[금액]
예(C++)
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; class Solution { public: int change(int amount, vector<int>& coins) { vector <int> dp(amount + 1); dp[0] = 1; int n = coins.size(); for(int i = 0; i < n; i++){ for(int j = coins[i]; j <= amount; j++){ dp[j] += dp[j - coins[i]]; } } return dp[amount]; } }; main(){ Solution ob; vector<int> v = {1,2,5}; cout << (ob.change(5, v)); }
입력
5 [1,2,5]
출력
4