#include <bits/stdc++.h> using namespace std; const int N = 100; int dp[N]; vector<vector<int>>combinations[N]; void findCombinations(int amount,vector<int>&coins,vector<int>currentCombination) { if(amount==0) { combinations[amount].push_back(currentCombination); return; } for(int coin:coins) { if(amount-coin>=0) { currentCombination.push_back(coin); findCombinations(amount-coin,coins,currentCombination); currentCombination.pop_back(); } } } void print_combinations(int amount) { if(combinations[amount].empty()) { cout<<"No combinations found"<<endl; return; } cout<<"Combinations:"<< endl; for(vector<int>combination:combinations[amount]) { for(int i=0;i<combination.size();i++) { cout << combination[i]; if(i<combination.size() - 1) cout<< " + "; } cout<<endl; } } int func(int amount, vector<int>&coins) { if(amount==0) return 0; int ans = INT_MAX; if(dp[amount]!=-1) return dp[amount]; for(int coin : coins) { if((amount - coin) >= 0) { ans = min(ans+0LL, func(amount-coin,coins)+1LL); } } return dp[amount]=ans; } int choose_coin(vector<int>&coins, int amount) { //memset(dp,-1,sizeof(dp)); int ans = func(amount,coins); return ans == INT_MAX?-1:ans; } int main() { //memset(dp,-1,sizeof(dp)); vector<int>coins={2,3,4,5,6,9,15}; cout<<"Minimum coin = "<<choose_coin(coins,23); findCombinations(23,coins,{}); print_combinations(23); //for(int i=0;i<sizeof(dp);i++) //{ // cout<<dp[i]<<" "; //} return 0; }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter